Was ist der GAC in .NET?


187

Ich suche nur einen kurzen Überblick über GAC für einen Laien, bitte keinen Link.

Antworten:


177

Richtig, im Grunde ist es eine Möglichkeit, DLLs global zugänglich zu halten, ohne sich um Konflikte sorgen zu müssen. Keine DLL-Hölle mehr. Jede Architektur und Version bekommt ihren eigenen Wohnort.

Es gibt auch eine eigene Möglichkeit, es im Explorer zu durchsuchen

C: \ Windows \ Assembly

Im Windows Explorer werden alle DLLs aufgelistet.

Aber wenn Sie starten cmd, können Sie sehen, wie es wirklich strukturiert ist:

C: \ Benutzer \ Tritter> CD C: \ Windows \ Assembly

C: \ Windows \ Assembly> Verzeichnis

 Verzeichnis von C: \ Windows \ Assembly

20.07.2009 14:18 <DIR> GAC
17.06.2009 16:22 <DIR> GAC_32
17.06.2009 16:22 <DIR> GAC_64
17.06.2009 16:22 <DIR> GAC_MSIL
 ... schnipsen ...
               0 Datei (en) 0 Bytes
               9 Dir (s) 90.538.311.680 Bytes frei

C: \ Windows \ Assembly> CD GAC_64

C: \ Windows \ Assembly \ GAC_64> Verzeichnis

 Verzeichnis von C: \ Windows \ Assembly \ GAC_64

17.06.2009 16:22 <DIR>.
17.06.2009 16:22 <DIR> ..
19.01.2008 09:54 <DIR> blbproxy
 ... schnipsen ...
19.01.2008 09:54 <DIR> srmlib
19.01.2008 06:11 <DIR> System.Data
19.01.2008 06:11 <DIR> System.Data.OracleClient
 ... schnipsen ...
               0 Datei (en) 0 Bytes
              34 Dir (s) 90.538.311.680 Bytes frei

C: \ Windows \ Assembly \ GAC_64> CD System.Data

C: \ Windows \ Assembly \ GAC_64 \ System.Data> Verzeichnis
 Verzeichnis von C: \ Windows \ Assembly \ GAC_64 \ System.Data

19.01.2008 06:11 <DIR>.
19.01.2008 06:11 <DIR> ..
04/11/2009 12:20 PM <DIR> 2.0.0.0__b77a5c561934e089
               0 Datei (en) 0 Bytes
               3 Dir (s) 90.538.311.680 Bytes frei

C: \ Windows \ Assembly \ GAC_64 \ System.Data> cd 2.0.0.0__b77a5c561934e089

C: \ Windows \ Assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> dir

 Verzeichnis von C: \ Windows \ Assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

11.04.2009 12:20 <DIR>.
04/11/2009 12:20 PM <DIR> ..
04/11/2009 12:12 PM 3,008,512 System.Data.dll
               1 Datei (en) 3.008.512 Byte
               2 Dir (s) 90.538.311.680 Bytes frei

C: \ Windows \ Assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

Hier sehen Sie die Version 2.0.0.0__b77a5c561934e089 von System.Data.

Eine DLL besteht aus 5 Teilen:

  1. Name
  2. Ausführung
  3. Die Architektur
  4. Kultur
  5. Öffentlicher Schlüssel

Obwohl die ersten 3 im Allgemeinen die großen sind.


12
Sie erhalten eine +1 für die Erwähnung, dass es eine neue Möglichkeit ist, global auf DLLs zu verweisen und dabei "dll hell" zu vermeiden. (Es wäre eine noch bessere Antwort, wenn Sie sich ein wenig mit der Hölle befassen würden und wie der GAC sie umgeht ... Sie haben die Grundzüge davon ... aber ich würde mich nur verschärfen Fügen Sie die Verzeichnisstruktur ein und fügen Sie ein wenig hinzu, wie die DLL identifiziert und eindeutig ist.) Das soll nicht zu negativ klingen ... Ich habe +1 gegeben!
Beska

Geben Sie einfach keinen Link an:]. Frage zu Ihrer Antwort: Wird die "3. Architektur" durch den Verzeichnisnamen "GAC_64" angegeben? Und ist die Kultur in diesem Fall leer - der Wert, der zwischen den Unterstrichen "__" liegen würde?
Danny Bullis

2
Gibt es GAC nur für .NET-Apps?
Zach Smith

93

GAC = Global Assembly Cache

Lassen Sie es uns zusammenfassen:

  • global - gilt für die gesamte Maschine
  • Assembly - wie .NET seine Code-Bibliotheken (DLLs) nennt
  • Cache - ein Ort zum Speichern von Dingen für einen schnelleren / gemeinsamen Zugriff

Der GAC muss also ein Ort zum Speichern von Codebibliotheken sein, damit alle Anwendungen auf dem Computer darauf zugreifen können.


64

Globaler Assembly-Cache

Jeder Computer, auf dem die Common Language Runtime installiert ist, verfügt über einen maschinenweiten Code-Cache, der als globaler Assembly-Cache bezeichnet wird. Der globale Assemblycache speichert Assemblys, die speziell für die gemeinsame Nutzung durch mehrere Anwendungen auf dem Computer vorgesehen sind.

Sie sollten Assemblys freigeben, indem Sie sie nur dann im globalen Assemblycache installieren, wenn dies erforderlich ist. Halten Sie als allgemeine Richtlinie Assembly-Abhängigkeiten privat und suchen Sie Assemblys im Anwendungsverzeichnis, es sei denn, die Freigabe einer Assembly ist ausdrücklich erforderlich. Darüber hinaus ist es nicht erforderlich, Assemblys im globalen Assemblycache zu installieren, um sie für COM-Interop- oder nicht verwalteten Code zugänglich zu machen.

Die Dinge, die MSDN enthält, können Sie überraschen ... Sie können es normalerweise wie einen Artikel lesen. Die unkomplizierten und wichtigsten Punkte oben, die komplizierten Details tiefer unten. Es erklärt es sicherlich besser als ich könnte.

Beachten Sie, dass Visual Studio alle DLLs im GAC auf der Registerkarte .NET des Referenzfensters anzeigt . (Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf ein Projekt und wählen Sie Referenz hinzufügen.) Dies sollte Ihnen eine greifbarere Vorstellung geben.


Er sagte kein Link, wollte eine Erklärung in Ihren eigenen Worten.
user142350

In der Originalversion seines Beitrags (ich glaube, er hat ihn schnell bearbeitet) wurde dies nicht angegeben!
Noldorin

15
Außerdem werden die Wörter von MSDN immer besser und genauer sein. :)
Noldorin


12

Der Global Assembly Cache (GAC) ist ein Ordner im Windows-Verzeichnis zum Speichern der .NET-Assemblys, die speziell für die gemeinsame Nutzung durch alle auf einem System ausgeführten Anwendungen vorgesehen sind. Baugruppen können von mehreren Anwendungen auf dem Computer gemeinsam genutzt werden, indem sie im globalen Assemblycache (GAC) registriert werden. GAC ist ein maschinenweiter lokaler Cache von Assemblys, die von .NET Framework verwaltet werden.


11

Exe Application verweist zunächst aus einem aktuellen Verzeichnis auf ein Unterverzeichnis. Und dann das Systemverzeichnis. Das VS6.0-Systemverzeichnis war ..windows / system32. Das .NET-Systemverzeichnis entspricht dem folgenden GAC-Pfad.

  1. GAC-Pfad

    1) C: \ Windows \ Assembly (für .NET 2.0 ~ 3.5)

    2) C: \ Windows \ Microsoft.NET \ Assembly (für .NET 4.0)

  2. So installieren Sie eine Assembly in GAC (als Administrator)

    1) Ziehen und Ablegen

    2) Verwenden Sie GacUtil.exe mit der Visual Studio-Eingabeaufforderung

     gacutil -i [Path][Assembly Name].dll
    • Hinweis: Um eine Assembly im GAC zu installieren, muss die Assembly einen starken Namen haben. Andernfalls wird folgende Fehlermeldung angezeigt: Fehler beim Hinzufügen einer Assembly zum Cache: Versuchen Sie, eine Assembly ohne starken Namen zu installieren.
  3. So deinstallieren Sie eine Assembly von GAC (als Administrator)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Hinweis: hat keine Erweiterung, .dll. Version und PublickeyToken können weggelassen und in der GAC-Assembly überprüft werden.

5

Es ist wie bei der COM-Registrierung, die in Bezug auf die physischen Dateien sowie deren Schnittstellen- und Standortinformationen richtig durchgeführt wurde. In COM befanden sich überall Dateien mit zentralisierten Metadaten. Das GAC zentralisiert den Knallschuss.


5

In GAC (Global Assembly Cache) befinden sich alle gemeinsam genutzten .NET-Assemblys.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.