Mono.Сесил - Как получить пользовательские атрибуты

StackOverflow https://stackoverflow.com/questions/1237345

Вопрос

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

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

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

Спасибо!

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top