Global Assembly Cache
Der Global Assembly Cache (GAC; deutsch „Globaler Assembly-Zwischenspeicher“) ist ein Verfahren des .NET-Frameworks, um Versionskonflikte zwischen Programmbibliotheken zu vermeiden.
Identität und Installation im GAC
Die Identität einer Assembly setzt sich aus fünf Komponenten zusammen: dem Namen, der Dateiversion, der Sprachversion, dem öffentlichen Schlüsseltoken und der Prozessorarchitektur, für die die Assembly übersetzt wurde. Die Identität der Assembly wird über einen so genannten „starken Namen“ gesichert. Dabei wird der Name durch die Signierung der Assembly mit einem öffentlichen Schlüssel geschützt. 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 gleichen Namens und Versionsnummer im GAC neben der ursprünglichen Assembly installiert werden. Lokalisierte Versionen wie z. B. für Deutsch oder Französisch (DE, FR) sind ebenso Teil der Identität der Assembly wie die Optimierung auf eine Prozessorplattform (CIL(MSIL), x86, x64).
Der GAC ermöglicht somit die systemweite Bereitstellung von Assemblies, ohne Namenskonflikte der zugrundeliegenden Dateien (DLLs oder EXEs) in Kauf zu nehmen. Die sogenannte „DLL Hell“ wurde durch die Einführung des GAC konsequent umgangen.
Die Installation der Dateien im GAC geschieht üblicherweise über den Windows Installer, kann aber auch manuell mit Hilfe des Programmes GACUTIL.exe erfolgen. Auf die Verzeichnisse des GAC kann nur mit Administratorrechten schreibend zugegriffen werden, sodass zur Installation von Dateien im GAC Administratorrechte erforderlich sind.
Implementierung des GAC unter Windows

Dateisystem
Bis zur .NET Version 2.0 werden die gemeinsam genutzten Assemblies in einem speziellen Verzeichnis (%SystemRoot%\assembly) installiert und verwaltet. Ab .NET Version 3.0 wird das Verzeichnis %SystemRoot%\Microsoft.NET\assembly verwendet. Dieses enthält weitere Unterverzeichnisse für die jeweilige Prozessorarchitektur (z. B. GAC, GAC_32, GAC_64, GAC_MSIL) und die eigentlichen Assembly-Namen. Die Verzeichnisse mit den Assembly-Namen enthalten Unterverzeichnisse mit der Assemblyversion und dem öffentlichen Schlüssel. Der Zugriff auf die passende Assemblyversion ist also über einen Verzeichnisbaum möglich.
Explorer-Erweiterung
Der Windows-Explorer verfügt über ein spezielles Interface zur Anzeige von Assemblies, den Assembly Cache Viewer. Beim Ansteuern des %SystemRoot%\assembly Verzeichnisses werden dem Benutzer alle installierten Assemblies mit Version, Kultur, Schlüsseltoken und Prozessorarchitektur angezeigt. Das Interface erlaubt auch eine Installation per Drag and Drop. Diese Interface funktioniert jedoch nur bis zur .NET Version 2.0.
Weblinks
- Globaler Assemblycache im MSDN
- Hinweise zum Global Assembly Cache-Tool (Gacutil.exe) im MSDN
- Details rund um den GAC ( vom 10. Oktober 2008 im Internet Archive) (englisch)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.