Der Global Assembly Cache (GAC) ist ein globales Verzeichnis, in das freigegebene Assemblies, also Assemblies mit einem strong name, installiert (kopiert) werden können. Ähnlich wie klassische DLLs können sie dadurch von mehreren Anwendungen gleichzeitig benutzt werden, ohne allerdings einen Eintrag in der Registry zu benötigen.
Weitere Gründe für das Hinzufügen einer Assembly in den GAC sind:
- Dateisicherheit:
Da der globale Assemblycache im WINNT-Verzeichnis installiert ist, können normalerweise nur Administratoren Dateien installieren oder löschen.
- Parallele Versionierung:
Mehrere Versionen einer Assembly können im GAC parallel eingestellt werden (Side-by-Side-Execution).
- Integritätsprüfung:
Beim Installieren in den GAC wird die Integrität jeder einzelnen Datei der Assembly überprüft.
- Performance-Vorteile:
1. Keine Verifikation, d. h. Zeitvorteil bei häufiger Nutzung der Assembly
2. Nur eine einzige Instanz der Assembly, d. h. beschleunigter Ladevorgang
bei mehrfacher Nutzung durch mehrere Clients
3. Schnelleres Finden durch die Common Language
Die Verwendung des GACs sollte wohl überlegt sein, da dieser Speicher genau wie das System32-Verzeichnis dazu neigen wird, mit längst nicht mehr benötigten Assemblies gefüllt zu sein.
Außerdem funktioniert bei diesen Anwendungen die einfache XCOPY Weitergabe nicht mehr.
Wenn Sie wissen wollen, welche Assemblies im GAC installiert sind, haben Sie zwei Möglichkeiten.
Erstens das Assembly Cache Viewer-Tool (shfusion.dll) des .NET Framework SDK. Hierbei handelt es sich um eine Erweiterung der Windows-Shell, mit dem der Inhalt des globalen Assemblycaches im Windows Explorer angezeigt und verändert werden kann.
Navigieren Sie im Windows Explorer einfach zum Unterverzeichnis \assembly des Windows-Verzeichnisses, um den Inhalt des globalen Assemblycaches anzuzeigen.
Mit dem Assembly Cache Viewer-Tool können folgende Aktionen durchgeführt werden:
- Anzeigen des Cacheinhalts
- Anzeigen und Ändern der Größenbeschränkungen für den Downloadcache
(unter Extras -> Cacheeinstellungen)
- Anzeigen der Eigenschaften einer einzelnen Assembly (rechter Mausklick)
- Hinzufügen von Assemblies zum Cache (Drag&Drop)
- Löschen von Assemblies aus dem Cache (rechter Mausklick)
- Anzeigen von Hilfeinformationen (F1 oder ? -> Hilfethemen)
Eine andere Möglichkeit ist, das Global Assembly Cache-Tool (Gacutil.exe) zu verwenden, welches auch im .NET Framework SDK enthalten ist. Mit diesem Tool können Sie außerdem Assemblies im GAC installieren oder löschen.
Um den Inhalt des GAC anzuzeigen, geben Sie in der Eingabeaufforderung folgenden Befehl ein:
Um den Inhalt des Downloadcaches anzuzeigen:
Gacutil.exe bietet Optionen zur Unterstützung einer Verweiszählung, die dem von Windows Installer unterstützten Verweiszählungsschema ähnelt. Mit Gacutil.exe können Sie zwei Anwendungen installieren, die dieselbe Assembly installieren, wobei das Tool die Anzahl der Verweise auf die Assembly verfolgt. Daher verbleibt die Assembly auf dem Computer, bis beide Anwendungen deinstalliert wurden.
Wenn Sie Gacutil.exe für die eigentliche Produktinstallation einsetzen, verwenden Sie die Optionen, die die Verweiszählung unterstützen.
So installieren Sie eine Assembly ohne Verweiszählung:
gacutil /i myAssembly.dll |
Wenn Sie eine Assembly mit Verweiszählung installieren möchten, müssen Sie mit dieser Option den Assemblynamen, den scheme-Parameter, den id-Parameter und den description-Parameter angeben, z.B.
gacutil /i /r myAssembly.dll UNINSTALL_KEY MyApp "Anwendungsbeschreibung" |
Der UNINSTALL_KEY MyApp-Parameter gibt den Registrierungsschlüsel an, der MyApp in Windows der Liste unter der Option Software hinzufügt. Der description-Parameter wird als ?Anwendungsbeschreibung? angegeben.
gacutil /i /r myAssembly.dll FILEPATH c:\applications\myApp\myApp.exe myApp |
Der scheme-Parameter FILEPATH und der id-Parameter c:\applications\myApp\myApp.exe geben den Pfad der Anwendung an, die myAssembly.dll installiert. Der description-Parameter wird als MyApp angegeben. Geben Sie diesen Wert an, wenn die Anwendung nicht dem Eintrag Software hinzugefügt wird.
gacutil /i /r myAssembly.dll OPAQUE "Hier benutzerdefinierte Anwendungsdetails" "Hier benutzerdefinierte Beschreibung" |
Geben Sie den scheme-Parameter OPAQUE an, wenn bei der Installation kein Registrierungschlüssel oder Dateipfad angegeben werden kann. Dieser Wert ermöglicht es Ihnen, benutzerdefinierte Informationen für den id-Parameter und den description-Parameter anzugeben.
Wie für die Installation gibt es auch für die Deinstallation mehrere Optionen. Der Befehl
löscht alle Assemblies ohne Verweiszählung mit dem Namen ?hallo? aus dem GAC.
Um nur eine bestimmte Assembly zu entfernen, müssen Sie spezifischere Angaben machen, wie die vollständige Versionsnummer, die Kultur oder den öffentlichen Schlüssel, z. B.
gacutil /u hallo, Version=1.0.0.1, Culture="de", PublicKeyToken=b03f5f7f11d50a3a |
Einfacher wäre das allerdings wohl mit einem rechten Mausklick in der Exploreransicht des Assemblyverzeichnisses.
Mit dem folgenden Befehl wird der Verweis auf myAssembly.dll durch die Anwendung myApp entfernt. Wenn es sich hierbei um den letzten Verweis auf die Assembly handelt, wird auch die Assembly aus dem Assemblycache entfernt.
gacutil /u /r myAssembly.dll FILEPATH c:\applications\myApp\myApp.exe myApp |
Um den Inhalt des Downloadcaches zu löschen, benutzen Sie folgenden Befehl:
Zum Schluß möchte ich noch kurz auf die Listenoptionen des Global Assembly Cache-Tools eingehen.
Möchten Sie mehrere Assemblies gleichzeitig installieren oder deinstallieren, können Sie ihren Pfad bzw. den voll gekennzeichneten Namen in jeweils eigenen Zeilen in einer ANSI-Textdatei speichern und mit dem Befehl
gacutil /il assemblyList.txt |
installieren, oder mit dem Befehl
gacutil /ul assemblyList.txt |
deinstallieren.