Es gibt ein Paket, mit dem ich mich befassen muss, das Assemblys direkt im GAC installiert (z. B. irgendwo tief in% windows% / Assembly).
Wie kann ich die eigentliche Assembly (die DLL) aus dem GAC in das normale Dateisystem austreiben?
Vielen Dank.
Es gibt ein Paket, mit dem ich mich befassen muss, das Assemblys direkt im GAC installiert (z. B. irgendwo tief in% windows% / Assembly).
Wie kann ich die eigentliche Assembly (die DLL) aus dem GAC in das normale Dateisystem austreiben?
Vielen Dank.
Antworten:
Ich habe den Rat aus diesem Artikel verwendet , um eine Baugruppe vom GAC zu erhalten.
Holen Sie sich DLL aus dem GAC
DLLs, die einmal in GAC bereitgestellt wurden (normalerweise unter c: \ windows \ Assembly), können nicht als normale DLL-Datei angezeigt oder verwendet werden. Sie können nicht direkt aus dem VS-Projekt referenziert werden. Entwickler behalten normalerweise eine Kopie der ursprünglichen DLL-Datei und verweisen im Projekt zur Entwicklungszeit (Entwurfszeit) darauf, wobei die Assembly von GAC zur Laufzeit des Projekts verwendet wird.
Wenn während der Ausführung (Laufzeit) festgestellt wird, dass die Assembly in GAC signiert und bereitgestellt ist, übernimmt die CLR die Assembly automatisch aus dem GAC anstelle der DLL, auf die während der Entwurfszeit in VS verwiesen wird. Falls der Entwickler die ursprüngliche DLL gelöscht hat oder sie aus irgendeinem Grund nicht hat, gibt es eine Möglichkeit, die DLL-Datei von GAC abzurufen. Führen Sie die folgenden Schritte aus, um die DLL aus dem GAC zu kopieren
Führen Sie regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll aus
- shfusion.dll ist eine Explorer-Erweiterungs-DLL, die dem GAC-Ordner ein eindeutiges Aussehen verleiht. Wenn Sie die Registrierung dieser Datei aufheben, wird der Assembly-Cache-Viewer entfernt und der GAC-Ordner wird als normaler Ordner im Explorer angezeigt.
Öffnen Sie "% windir% \ Assembly \ GAC_MSIL".
Navigieren Sie zu Ihrem DLL-Ordner in der Tiefe, um Ihre DLL zu finden.
Kopieren Sie die DLL irgendwo auf Ihre Festplatte und verweisen Sie von dort in Ihr Projekt
Führen Sie "regsvr32% windir% \ Microsoft.NET \ Framework \ <. NET-Versionsverzeichnis> \ shfusion.dll" aus, um die Datei shfusion.dll erneut zu registrieren und die ursprüngliche eindeutige Ansicht des GAC wiederherzustellen.
shfusion.dllder DllInstall()Einstiegspunkt, der regsvr32beim Übergeben der /iOption aufgerufen wird, nicht unterstützt . Wenn Sie diese Option weglassen, können Sie die Komponente erfolgreich neu registrieren.
Die hier beschriebene Methode ist sehr einfach:
Zusammenfassung aus Artikel:
\\YourServer\C$\Windows\Assembly)Öffnen Sie die Eingabeaufforderung und geben Sie Folgendes ein:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Dies sollte den Dump des gesamten GAC ergeben
Genießen!
Ja.
Fügen Sie den DisableCacheViewer-Registrierungsschlüssel hinzu
Erstellen Sie unter HKLM \ Software \ Microsoft \ Fusion \ einen neuen Dword-Schlüssel mit dem Namen DisableCacheViewer und setzen Sie den Wert [DWORD] auf 1.
Kehren Sie zum Windows-Explorer zum Assembly-Ordner zurück. Dies ist die normale Dateisystemansicht.
Ich denke, der einfachste Weg ist es, es über die Kommandozeile zu tun, wie David es erwähnt. Der einzige Trick ist, dass sich die DLL nicht einfach unter C: \ Windows \ Assembly befindet. Sie müssen zu C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY] navigieren. Sie können dann eine Kopie erstellen mit:
Kopieren Sie [ASSEMBLY_NAME] .dll c: \ (oder einen beliebigen Speicherort)
Hoffentlich hilft das.
Ich habe festgestellt, dass es einfach ist, die Eingabeaufforderung zu öffnen und den von Ihnen genannten Ordner zu durchsuchen, bis Sie die gewünschte DLL gefunden haben. Anschließend können Sie den Befehl copy verwenden, um sie herauszuholen. Windows Explorer bietet eine "hilfreiche" Sonderansicht dieses Ordners.
Öffnen Sie RUN und geben %windir%\assembly\GAC_MSILSie Folgendes ein. Dadurch werden Ihre DLLs in der Ordneransicht geöffnet. Sie können dann zu Ihrem Ordner mit dem Namen DLL navigieren und ihn öffnen. Sie finden Ihre DLL-Datei und können sie einfach kopieren
Ich bin der Autor von PowerShell GAC . Mit PowerShell GAC können Sie Assemblys aus dem GAC extrahieren, ohne von GAC-Interna abhängig zu sein, z. B. das Ändern von Ordnerstrukturen.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Dieser MSDN-Blogbeitrag beschreibt drei verschiedene Möglichkeiten zum Extrahieren einer DLL aus dem GAC. Eine nützliche Zusammenfassung der bisher gegebenen Methoden.
Ich glaube, ich habe einen Weg gefunden, um in das GAC zu schauen, ohne die Registrierung zu ändern oder die Befehlszeile, Powershell oder andere Programme zu verwenden:
Erstellen Sie eine neue Verknüpfung (zu einer beliebigen Stelle). Ändern Sie dann die Verknüpfung so, dass das Ziel wie folgt lautet:
%windir%\assembly\GAC_MSIL\System
Das Öffnen dieser Verknüpfung führt Sie zum Systemordner im GAC (den jeder haben sollte) und hat den wunderbaren Nebeneffekt, dass Sie in ein höheres Verzeichnis wechseln und dann in einen anderen gewünschten Ordner navigieren können (und die DLL-Dateien usw. anzeigen können).
Ich habe dies unter Windows 7 und Windows Server 2012 getestet.
Hinweis: Sie können dieses Ziel beim Erstellen der Verknüpfung nicht verwenden, aber Sie können es bearbeiten.
Genießen!
In einem Powershell-Skript können Sie dies versuchen. Ich hatte nur eine einzige Version der Baugruppe im GAC, daher funktionierte dies einwandfrei.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
Dabei kann der Assemblypfad Platzhalter verwenden.
Eine andere Richtung - entpacken Sie einfach die MSI-Datei und holen Sie sich die Goodies auf diese Weise. Spart Ihnen die eventuelle Deinstallation. . .
Das Kopieren von einer Befehlszeile ist nicht erforderlich. Ich habe den Namen der DLL aus der Startfenstersuche eingegeben. Ich habe See More Results gewählt. Der im GAC wurde im Suchfenster zurückgegeben. Ich habe mit der rechten Maustaste darauf geklickt und den Speicherort der geöffneten Datei angegeben. Es wurde im normalen Windows Explorer geöffnet. Ich habe die Datei kopiert. Ich schloss das Fenster. Getan.