Mono.Cecil - Как получить пользовательские атрибуты - PullRequest
4 голосов
/ 06 августа 2009

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

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

Я знаю, что это должен быть атрибут, для которого я установил свою функцию, потому что, когда я удаляю его из dll, вторая строка кода обнуляется Я бы хотел получить имя атрибута. В настоящее время вторая строка кода вернет просто «Mono.Cecil.CustomAttribute». Я предполагаю, что должен быть способ получить имя атрибута (тип класса), верно?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 06 августа 2009

У меня были проблемы с этим при написании MoMA . Вот код, который он использует:

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString()
0 голосов
/ 06 августа 2009

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

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

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

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

...