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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top