Question

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

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

Je sais que cela doit être l'attribut sur lequel j'ai défini ma fonction, car lorsque je la supprime de la DLL, la deuxième ligne de code se révélera nulle.Ce que j'aimerais faire, c'est pouvoir obtenir le nom de l'attribut.Actuellement, la deuxième ligne de code renverra simplement 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!

Était-ce utile?

La solution

J'ai eu du mal avec ça en écrivant MoMA aussi.Voici le code qu'il utilise :

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

Autres conseils

UN CustomAttribute est un exemple de System.Attribute Type dérivé, donc ToString() fera tout ce que l'auteur a décidé.

Si vous souhaitez connaître les types d'attributs, vous devez demander leur type :

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

Je n'ai pas vu cette propriété CustomAttributes que vous utilisez, j'ai donc plutôt utilisé la méthode MemberInfo.GetCustomAttributes(bool) que j'utilise toujours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top