Secondo Google Analytics, nonostante fosse un tema antiquato, era ancora molto consultato, per cui ho deciso di ripubblicarlo.
L’altro giorno, mentre preparavo un programmino C# .NET, per un motivo a me totalmente sconosciuto mi sono ritrovato con una DLL che uso spesso non più disponibile nella lista delle possibili referenze.
Da un rapido controllo, mi sono però accorto che tale DLL era ancora caricata in GAC, per cui mi sono avventurato nel magico mondo dell’estrazione di una libreria compilata dalla cache.
E ho trovato ben due metodi (ma solo il secondo ha funzionato per me).
Il primo metodo consiste nell’accedere da riga di comando alla cartella fisica della GAC, bypassando l’interfaccia speciale che Windows imposta per tale directory (normalmente C:\Windows\assembly).
Se accedete a tale percorso con Explorer vedrete infatti un’interfaccia un po’ diversa dal solito, che riporta tutte le informazioni dettagliate delle DLL, ma che non permette le usuali operazioni di copia/sposta.
Per accedere alla riga di comando, premete Start > Esegui, scrivete cmd e date Invio.
A questo punto raggiungete il percorso della vostra DLL e tentate un xcopy brutale:
cd \
cd Windows\assembly\GAC\<nome_dll>\<versione_dll-token>\
copy <nome_dll> c:\
Se non avrete messaggi di errore, vi ritroverete con la vostra DLL copiata in C:\.
Nel mio caso questa procedura non ha funzionato per un problema di permessi, ma ho avuto successo con questa seconda tecnica.
Aprite una console di riga di comando (il cmd di cui sopra) e scrivete quanto segue:
regsvr32 /u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll
Questo comando serve a de-registrare la libreria shfusion.dll, che si occupa di fornire l’interfaccia alla cartella speciale della GAC. Disattivata questa interfaccia potete tranquillamente aprire la cartella come una qualsiasi altra directory e copiare quello che vi serve.
Quando avete finito ri-registrate la libreria, e siete a posto:
regsvr32 /i C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll
Enjoy!