C'è un pacchetto che devo affrontare che installa gli assembly direttamente nel GAC (ad es. Da qualche parte in profondità in% windows% / assembly).
Come esorcizzare l'assembly effettivo (la DLL) dal GAC nel normale file system?
Grazie.
C'è un pacchetto che devo affrontare che installa gli assembly direttamente nel GAC (ad es. Da qualche parte in profondità in% windows% / assembly).
Come esorcizzare l'assembly effettivo (la DLL) dal GAC nel normale file system?
Grazie.
Risposte:
Ho usato il consiglio di questo articolo per ottenere un assemblaggio dal GAC.
Ottieni DLL da The GAC
Le DLL una volta distribuite in GAC (normalmente situate in c: \ windows \ assembly) non possono essere visualizzate o utilizzate come un normale file DLL. Non possono essere referenziati direttamente dal progetto VS. Gli sviluppatori di solito conservano una copia del file DLL originale e lo fanno riferimento nel progetto in fase di sviluppo (progettazione), che utilizza l'assemblaggio da GAC durante il runtime del progetto.
Durante l'esecuzione (runtime) se si rileva che l'assembly è stato firmato e distribuito in GAC, CLR preleva automaticamente l'assembly dal GAC anziché dalla DLL a cui si fa riferimento durante la fase di progettazione in VS. Nel caso in cui lo sviluppatore abbia eliminato la DLL originale o non ce l'abbia per qualche motivo, c'è un modo per ottenere il file DLL da GAC. Attenersi alla seguente procedura per copiare DLL da GAC
Esegui regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll è una DLL di estensione explorer che dà un aspetto distinto alla cartella GAC. L'annullamento della registrazione di questo file rimuoverà il visualizzatore della cache dell'assembly e la cartella GAC sarà quindi visibile come qualsiasi normale cartella in Explorer.
Apri "% windir% \ assembly \ GAC_MSIL".
Passare alla cartella DLL nel profondo per trovare la DLL.
Copia la DLL da qualche parte sul tuo disco rigido e fai riferimento da lì nel tuo progetto
Eseguire "regsvr32% windir% \ Microsoft.NET \ Framework \ <. Directory versione NET> \ shfusion.dll" per registrare nuovamente il file shfusion.dll e riconquistare la vista distinta originale del GAC.
shfusion.dll
che non supporti il DllInstall()
punto di ingresso invocato regsvr32
quando viene passata l' /i
opzione. Se si omette tale opzione, è possibile registrare nuovamente il componente correttamente.
Il metodo qui descritto è molto semplice:
Riepilogo dell'articolo:
\\YourServer\C$\Windows\Assembly
)Apri il prompt dei comandi e digita:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Questo dovrebbe dare il dump dell'intero GAC
Godere!
Sì.
Aggiungi la chiave di registro DisableCacheViewer
Creare una nuova chiave dword in HKLM \ Software \ Microsoft \ Fusion \ con il nome DisableCacheViewer e impostare il valore [DWORD] su 1.
Torna a Esplora risorse nella cartella assembly e sarà la normale vista del file system.
Penso che il modo più semplice sia farlo attraverso la riga di comando come menziona David. L'unico trucco è che il DLL non si trova semplicemente in C: \ Windows \ Assembly. Devi passare a C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [TASTO PUBBLICO]. Puoi quindi fare una copia usando:
copia [ASSEMBLY_NAME] .dll c: \ (o qualunque posizione desideri)
Spero che aiuti.
Il modo più semplice che ho trovato è aprire il prompt dei comandi e sfogliare la cartella menzionata fino a trovare la DLL desiderata, quindi è possibile utilizzare il comando copia per estrarlo. Windows Explorer ha una vista speciale "utile" di questa cartella.
Apri Esegui quindi digita %windir%\assembly\GAC_MSIL
, questo aprirà le tue dll nella vista delle cartelle, puoi quindi passare alla cartella con nome DLL e aprirla, troverai il tuo file dll e copiarlo facilmente
Sono l'autore di PowerShell GAC . Con PowerShell GAC è possibile estrarre assiemi dal GAC senza dipendere dagli interni di GAC come modificare le strutture delle cartelle.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Penso di aver trovato un modo per guardare all'interno del GAC senza modificare il registro o utilizzare la riga di comando, PowerShell o altri programmi:
Crea un nuovo collegamento (ovunque). Quindi modificare il collegamento in modo che la destinazione sia:
%windir%\assembly\GAC_MSIL\System
L'apertura di questo collegamento porta alla cartella Sistema all'interno del GAC (che tutti dovrebbero avere) e ha il meraviglioso effetto collaterale di farti passare a una directory superiore e quindi navigare in qualsiasi altra cartella desiderata (e vedere i file DLL, ecc.)
Ho provato questo su Windows 7 e Windows Server 2012.
Nota: non ti consentirà di utilizzare quella destinazione durante la creazione del collegamento, ma ti consentirà di modificarlo.
Godere!
Da uno script Powershell, puoi provare questo. Avevo solo una versione dell'assemblaggio nel GAC, quindi ha funzionato bene.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
dove il percorso dell'assembly può usare caratteri jolly.
Un'altra direzione: basta decomprimere il file MSI e ottenere le chicche in quel modo. Ti salva dall'eventuale disinstallazione. . .
La copia da una riga di comando non è necessaria. Ho digitato il nome della DLL dalla ricerca di Start Window. Ho scelto Visualizza più risultati. Quello nel GAC è stato restituito nella finestra di ricerca. Ho cliccato con il tasto destro su di esso e ho detto che il file è aperto Si è aperto in Windows Explorer normale. Ho copiato il file. Ho chiuso la finestra. Fatto.