ILDASM e ILASM: un esempio pratico (e c'entra anche NHibernate)

di Marco De Sanctis, in Misc,

Accadde un giorno che avevo un piccolo (e vecchio) CMS con un bug da fixare e ho avuto l'idea di aggiornare il motore di persistenza, che usava NH 1.2.0 alla nuovissima 2.0.1. Scarico quindi i due progetti NHibernate.Core e NHibernate.Caches ma... niente! Quest'ultima non ne voleva sapere di andare a causa di una reference verso la versione 2.0.0 di NHibernate che purtroppo non era più disponibile per il download.

Premetto che ad oggi il problema è stato risolto, ora NHibernate.Caches punta alla versione corretta, ma in quel frangente mi sono trovato abbastanza spaesato. Le possibili soluzioni erano:

  1. Ricompilare tutto NHibernate, modificando il numero di versione a 2.0.0, ma non mi piaceva l'idea
  2. Scaricare i sorgenti della Cache e modificare la reference, ma questi non erano disponibili se non come trunk SVN, e avrei in questo modo rischiato di portare in produzione codice non ancora ufficialmente rilasciato
  3. Utilizzare l'Assembly Binding Redirection del CLR
  4. Disassemblare l'assembly NHibernate.Caches e modificare la reference per farlo puntare a NH 2.0.1

A dispetto delle apparenze, la soluzione 4 è in assoluto la più veloce e semplice e infatti è proprio quella che ho scelto.

I passi sono estremamente banali:

  1. Si apre l'assembly con ILDASM
  2. Si seleziona File -> Dump, avendo cura di impostare a checked tutte le checkbox proposte
  3. A questo punto basta aprire il file .IL generato con un qualsiasi editor testuale e cercare ".assembly extern" per posizionarsi nella sezione del MSIL che contiene l'indicazione delle reference
  4. Modificare manualmente la reference alla versione voluta e salvare
  5. Ricompilare il file IL con l'istruzione a riga di comando:

ILASM nomeFileMSIL.IL /DLL /OUTPUT=nomeAssembly.dll

Et voilà, it works!

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese