Mono.Cecil : la reflexion sous stéroïdes.

Publié par Fabrice Michellonet sous le(s) label(s) le 27 mai 2009

Derniè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:

JL a dit… @ 1 juin 2009 à 00:09

typedef.IsClass \o/

Fabrice Michellonet a dit… @ 1 juin 2009 à 08:27

Je peux savoir ce qui te plais autant dans cette ligne de code?
Je sens un brin d'ironie... non?

viagra without prescription a dit… @ 1 juillet 2010 à 19:52
Ce commentaire a été supprimé par un administrateur du blog.

Enregistrer un commentaire