2009-08-06 27 views
4

Cecilを使用して、指定されたメソッドに関連付けられた属性を検査しようとしています。それを見つけるように見えるが、私は次のコードを使用して、その名前を取得することはできません。Mono.Cecil - カスタム属性を取得する方法

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

私は、DLLからそれを削除する場合ので、これは、私は私の機能を設定した属性である必要があります知っている、第二コード行はnullになります。私がしたいのは、属性の名前を取得できることです。現在、2行目のコードは "Mono.Cecil.CustomAttribute"を返します。私は属性の名前(クラス型)の名前を取得する方法があるはずだと思いますよね?

ありがとうございます!

答えて

7

MoMAも書いていますが、これは問題でした。

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

面白いです。それは今も私が使っていたものでした。 –

+3

私はセシルの作者からそれを得たので、それが唯一の方法だと思う。 – jpobst

+0

+1:Nice、thanks –

-3

CustomAttributeのでToString()は、著者が決めたものは何でもします、System.Attribute派生型のインスタンスである:ここでは、使用するコードです。

あなたは属性タイプについて知りたい場合は、そのタイプを尋ねる必要があります。

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

を私はあなたが使用しているCustomAttributesこのプロパティを見ていないので、私はむしろ、私がいつも使う方法MemberInfo.GetCustomAttributes(bool)を使用。

+0

ええ、私は反射を使用していない、私はセシルを使用しています。反射のように見えますよね? –

+3

-1:質問はSystem.ReflectionではなくMono.Cecilについてです。 – ShdNx

関連する問題