Was ist Globaler Assemblierungs-Cache (GAC)?
Der globale Assemblycache (Global Assembly Cache, GAC) ist ein Ordner im Windows-Verzeichnis zum Speichern der .NET-Assemblys, die speziell für die gemeinsame Nutzung durch alle Anwendungen bestimmt sind, die auf einem System ausgeführt werden.
Das Konzept von GAC ist das Ergebnis der .NET-Architektur, deren Design das Problem der ‚DLL-Hölle‘ anspricht, die in COM (Component Object Model) existierte. Im Gegensatz zu COM muss die Assembly in GAC nicht vor ihrer Verwendung registriert werden. Auf jede Assembly wird global ohne jeden Konflikt zugegriffen, indem Name, Version, Architektur, Kultur und öffentlicher Schlüssel identifiziert werden.
Der GAC ist ein maschinenweiter Code-Cache, der für die parallele Ausführung von Assemblys verwendet wird. Der GAC implementiert die Funktion der gemeinsam genutzten Bibliothek, bei der verschiedene Anwendungen den in den Dateien in einem gemeinsamen Ordner platzierten Code wiederverwenden. In .NET 4.0 ist der Standardspeicherort:% windir% Microsoft.NET assembly
Der GAC ist auch der erste im Suchpfad beim Laden einer .NET-Assembly. Die einzige Voraussetzung für die Bereitstellung einer Assembly in GAC ist, dass sie einen starken Namen haben sollte. Die CLR (Common Language Runtime) verweist auf eine Assembly, die auf einer bestimmten Version basiert, die von der aufrufenden Anwendung erwähnt wird. Das virtuelle Dateisystem von GAC hilft beim Abrufen der versionsspezifischen Assembly.
Die beiden mit GAC verbundenen Tools sind GAC Tool (gacutil.exe) und Assembly Cache Viewer (shfusion.dll). GAC Tool wird verwendet, um das Vorhandensein einer Assembly zu prüfen, eine freigegebene Assembly zu registrieren, den Inhalt von GAC anzuzeigen und zu bearbeiten. Als Systemordner müssen Administratorrechte verwendet werden. Der Assembly-Cache-Viewer wird verwendet, um die Details (Version, Kultur usw.) anzuzeigen, die mit den im Cache enthaltenen Assemblys verknüpft sind.
GAC bietet die Vorteile der Wiederverwendung von Code, der Dateisicherheit (aufgrund seiner Installation im Verzeichnis ’systemroot‘ und daher nur von Benutzern mit Administratorrechten gelöscht werden kann), Seite-an-Seite-Ausführung (mehrere Versionen einer Assembly können im selben Ordner verwaltet werden) ), etc.
Einer der Nachteile bei der Verwendung von GAC ist, dass die Version von .NET Framework, die auf dem System installiert ist, auf dem GAC verwendet wird, und die Version, die zum Kompilieren der Anwendung verwendet wird, identisch sein müssen. Starke Namen können auch nicht auf Assemblys angewendet werden (wie zum Beispiel Code von Drittanbietern), von denen die Assemblys im GAC-Ordner abhängen.