Mono.Cecil - Como obter os atributos personalizados
-
11-09-2019 - |
Pergunta
Eu estou tentando usar Cecil para inspecionar os atributos associados a um determinado método. Parece para encontrá-lo, mas eu não posso começar seu nome usando o seguinte código:
AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].ToString()
Eu sei que este deve ser o atributo que eu definir a minha função para, porque quando eu removê-lo do dll, a segunda linha de código irá revelar-nulo. O que eu gostaria de fazer é ser capaz de obter o nome do atributo. Atualmente, a segunda linha de código irá retornar apenas um "Mono.Cecil.CustomAttribute". Eu acho que deve haver uma maneira de obter o nome de um atributo de nome (tipo de classe), certo?
Obrigado!
Solução
Eu tive problemas com isso ao escrever MoMA também. Aqui está o código que utiliza:
AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString()
Outras dicas
A CustomAttribute
é uma instância de uma System.Attribute
derivados Type, assim ToString()
vai fazer o que o autor decidiu.
Se você quer saber sobre os tipos de atributos que você deve perguntar para o seu tipo:
typeInfo.GetCustomAttributes(false)[0].GetType().ToString() ;
Eu não vi esta propriedade CustomAttributes
você está usando, então eu em vez usou o MemberInfo.GetCustomAttributes(bool)
método que eu uso sempre.