Mono.Cecil : la reflexion sous stéroïdes.
Publié par Fabrice Michellonet sous le(s) label(s) Mono.Cecil le 27 mai 2009Dernièrement en étudiant les possibilités offertes par T4 (un prochain billet y sera consacré), j'ai été confronté une fois de plus a un problème bien connu de la Refection : L'impossibilité de décharger un assembly de l'AppDomain l'ayant chargé; La seule solution étant de décharger tout l'AppDomain.
Dans mon cas, l'AppDomain chargeant l'assembly était hosté par Visual Studio, ma seule solution était donc de fermer Visual Studio 2008... sniff sniff un peu violent!
En fouillant mes bookmarks non traités, je retombe sur Mono.Cecil, un Framework d'introspection écrit par Jean-Baptiste Evain.
Qu'est ce que Mono.Cecil? Je dirais que c'est de la reflexion sous stéroïde car non soumis aux mêmes limitations que la reflexion, et qu'en prime on peut aussi créer/modifier du code CIL avec.
Alors comment choisir entre les deux ? Je vous laisse découvrir l'excellent article Mono.Cecil vs. System.Reflection de Patrick Smacchia un des auteurs de NDepend
Pour ne pas déroger à la règle un petit bout de code afin de mettre le pied a l'étrier.
AssemblyDefinition myLibrary = AssemblyFactory.GetAssembly("MyLibrary.dll");
foreach (TypeDefinition typeDef in myLibrary.MainModule.Types){
if (!typeDef.IsClass)
continue;
Console.WriteLine(typeDef.FullName);
}
Bonne introspection.
3 commentaires:
typedef.IsClass \o/
Je peux savoir ce qui te plais autant dans cette ligne de code?
Je sens un brin d'ironie... non?
Enregistrer un commentaire