Questo articolo è stato pubblicato 3 anni 5 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi.Stasera stavo smanettando con la reflection di .NET. Le potenzialità sono davvero enormi. Tra le molte funzionalità è possibile creare dinamicamente codice .NET a run-time grazie ai vari oggetti Builder e all’ILGenerator.
Dopo varie prove creo il mio primo assembly con all’interno la mia prima banalissima classe, tutto a run-time. Salvo il tutto nel file MyTestAssembly.dll. Tutto funziona alla grande! Apro per curiosità con Reflector l’assembly appena generato. Eseguo la funzione Disassemble sul mio type e fin qui tutto bene. Vedo il listato collassato della mia simpatica classe creata dinamicamente. Fin qui una figata
Clicco in fine su Expand Methods, per vedere in dettaglio il sorgente dei metodi, e BAM! Per la prima volta vedo crashare Reflector! Allego l’immagine per gli increduli.
Non ci posso credere, Reflector che crasha sulla mia classe creata dinamicamente! Eppure la mia classe è perfettamente conforme alle specifiche IL. Tanto più che, se così non fosse, l’AssemblyBuilder non mi avrebbe permesso il salvataggio del codice creato su file. Come tra l’altro è più volte successo quando sbagliavo qualcosa. Nei prossimi giorni indagherò sul mistero!
Riferimenti
http://msdn.microsoft.com/en-us/library/f7ykdhsy(VS.71).aspx
http://www.red-gate.com/products/reflector/
http://msdn.microsoft.com/en-us/library/system.reflection.emit.ilgenerator.aspx
Tags: .net, Reflection, Reflector