Global Assembly Cache
aus Wikipedia, der freien Enzyklopädie
Der Global Assembly Cache (GAC) ist ein spezielles Verzeichnis, in dem gemeinsam genutzte Assemblies installiert werden. Hier werden mehrere Versionen derselben Assembly abgelegt und installiert. Das .NET Framework entscheidet aufgrund der Identität und den Versionierungsregeln, welche Assembly verwendet werden soll.
[Bearbeiten] Identität und Installation im GAC
Die Identität der Assembly setzt sich aus fünf Komponenten zusammen. Dem Namen der Assembly, der Version der Assembly, der Kultur, dem öffentlichen Schlüsseltoken und der Prozessorarchitektur. Grundsätzlich handelt es sich um eine andere Assembly, wenn sich eine dieser Komponenten ändert. Die Identität der Assembly wird über einen sogenannten „starken Namen“ gesichert. Dieser starke Name wird durch die Signierung der Assembly mit einem kryptografischen Schlüssel erzeugt. Das öffentliche Schlüsseltoken ist der Public Key dieses kryptografischen Schlüssels. Es ist möglich eine Assembly durch Signierung mit unterschiedlichen Schlüsseln mehrfach im GAC zu installieren. Somit kann z. B. ein Softwarehersteller eine quelloffene Bibliothek verändern (patchen) und mit seinen eigenen Keys signieren. Diese Assembly kann dann trotz gleichem Namen und Versionsnummer im GAC neben der ursprünglichen Assemby installiert werden. Auch die Installation von Ressourcen-Assemblies in anderen Kulturen (Lokaliserte Assemblies z. B. für die Kultur DE-Deutschland oder FR-Frankreich) wird durch diesen Mechanismus ermöglicht, da die Kultur (DE, FR) Teil der Identität der Assembly ist. Auch die Optimierung auf eine Plattform (MSIL, x86, X64) ist auf dieser Basis möglich. Der GAC ermöglicht somit die systemweite Bereitstellung von Assemblies ohne Namenskonflikte bei den zugrundelegenden Dateien (DLLs oder EXEs). Die sogenannte „DLL-Hell“ wurde durch die Einführung des GAC konsequent umgangen.
Die Installation im GAC kann über das Programm GACUTIL.exe erfolgen. Bei kommerziellen Produkten wird die Installation über den Windows Installer durchgeführt.
[Bearbeiten] Implementierung des GAC unter Windows
Der GAC befindet sich unter Windows im Unterverzeichnis „assembly“ des Systemverzeichnisses (z. B. C:\Windows\assembly). In diesem Unterverzeichns befinden sich weitere Verzeichnisse, welche die Prozessorarichtektur reflektieren (GAC, GAC_32, GAC_64, GAC_MSIL). Unterhalb dieses Verzeichnisses sind weitere Unterverzeichnisse mit dem Assemblynamen vorhanden. Diese enthalten wieder Unterverzeichnisse mit der Assemblyversion und dem Public Key Token. Die Auflösung der Identität und das Auffinden einer konkreten Assembly ist also als Directory Operation implementiert. Assemblies mit gleichem Namen sind in dieser Verzeichnisstruktur in den ihrer Identität entsprechenden Unterverzeichnissen installiert, und können deshalb problemlos gleichzeitig im GAC installiert sein.
Auf diese Verzeichnisse kann nur mit Administratorrechten schreibend zugegriffen werden, sodass zur Installation im GAC Administratorrechte erforderlich sind.