Mono.Cecil - Comment obtenir des attributs personnalisés
-
11-09-2019 - |
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!
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.