2009-08-06 10 views
4

J'essaie d'utiliser Cecil pour inspecter les attributs associés à une méthode donnée. Il semble trouver, mais je ne peux pas obtenir son nom en utilisant le code suivant:Mono.Cecil - Comment obtenir des attributs personnalisés

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

Je sais que cela doit être l'attribut que j'ai mis ma fonction, parce que quand je l'enlève de la dll, la deuxième ligne de code se terminera par null. Ce que j'aimerais faire, c'est pouvoir obtenir le nom de l'attribut. Actuellement la deuxième ligne de code retournera juste un "Mono.Cecil.CustomAttribute". Je suppose qu'il devrait y avoir un moyen d'obtenir le nom d'un attribut (type de classe), n'est-ce pas?

Merci!

Répondre

7

J'ai également eu des problèmes avec cela lors de l'écriture de MoMA. Voici le code qu'il utilise:

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

Drôle. C'était ce que j'utilisais maintenant aussi. –

+3

Je l'ai eu de l'auteur de Cecil, donc je pense que c'est le seul moyen. – jpobst

+0

+1: Nice, merci –

-3

A CustomAttribute est une instance d'un type dérivé System.Attribute, donc ToString() fera tout l'auteur a décidé.

Si vous voulez en savoir plus sur les types d'attributs que vous devriez demander leur type:

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

Je ne l'ai pas vu cette propriété CustomAttributes que vous utilisez, donc je préfère utiliser la méthode MemberInfo.GetCustomAttributes(bool) que je l'utilise toujours.

+0

Oui, mais je n'utilise pas de réflexion, j'utilise du cécile. Cela ressemble à de la réflexion, non? –

+3

-1: la question concerne Mono.Cecil, pas System.Reflection. – ShdNx

Questions connexes