2009-08-06 4 views
4

Я пытаюсь использовать Cecil для проверки атрибутов, связанных с данным методом. Кажется, чтобы найти его, но я не могу получить его имя, используя следующий код:Mono.Cecil - Как получить пользовательские атрибуты

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

Я знаю, что это должно быть атрибутом Я настроил свою функцию, потому что когда я удалить его из библиотеки DLL, второй строка кода окажется равной нулю. То, что я хотел бы сделать, это получить имя атрибута. В настоящее время вторая строка кода возвращает только «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: Ницца, спасибо –

-3

CustomAttribute является экземпляром System.Attribute производного типа, так ToString() будет делать то, что автор решил.

Если вы хотите знать о типах атрибутов вы должны задать для их типа:

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

Я не видел это свойство CustomAttributes вы используете, так что я довольно использовал метод MemberInfo.GetCustomAttributes(bool) который я всегда использую.

+0

Да, но я не использую отражение, я использую сесил. Это похоже на отражение, верно? –

+3

-1: вопрос касается Mono.Cecil, а не System.Reflection. – ShdNx

Смежные вопросы