DevTrain

Autor: Kerstin Lahr

GAC - Der Global Assembly Cache

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:

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:

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:

gacutil /l

Um den Inhalt des Downloadcaches anzuzeigen:

gacutil /ldl

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

gacutil /u hallo

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:

gacutil /cdl

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.


Erfasst am: 24.09.2003 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=888
© Copyright 2003 ppedv AG - http://www.ppedv.de