2009-08-06 68 views
4

我正在嘗試使用Cecil來檢查與給定方法關聯的屬性。這似乎找到它,但使用下面的代碼我無法得到它的名字:Mono.Cecil - 如何獲得自定義屬性

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin); 
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].ToString() 

我知道這一定是我設置我的功能屬性,因爲當我從DLL中刪除,第二代碼行將變爲null。我想要做的是能夠獲取屬性的名稱。目前第二行代碼將只返回一個「Mono.Cecil.CustomAttribute」。我猜應該有一種獲得屬性名稱(類類型)名稱的方法,對吧?

謝謝!

回答

7

我在編寫MoMA時遇到了麻煩。下面是它使用的代碼:

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin); 
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString() 
+0

有趣。那也是我現在使用的。 – 2009-08-06 16:03:42

+3

我是從Cecil的作者那裏得到的,所以我認爲這是唯一的方法。 – jpobst 2009-08-06 16:24:03

+0

+1:很好,謝謝 – 2009-11-09 12:58:41

-3

一個CustomAttributeSystem.Attribute派生類型的實例,因此ToString()將盡一切筆者決定。

如果你想了解的屬性類型,你應該問他們類型:

typeInfo.GetCustomAttributes(false)[0].GetType().ToString() ; 

我還沒有看到這個屬性CustomAttributes您使用的,所以我寧願使用的方法MemberInfo.GetCustomAttributes(bool)這是我一直使用。

+0

是的,但我沒有使用反射,我正在使用塞西爾。這看起來像反思,對吧? – 2009-08-06 16:07:12

+3

-1:問題是關於Mono.Cecil,而不是System.Reflection。 – ShdNx 2011-03-20 15:05:12