Mono.Сесил - Как получить пользовательские атрибуты
-
11-09-2019 - |
Вопрос
Я пытаюсь использовать 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)
которым я всегда пользуюсь.