Co to jest GAC w .NET?

187

Po prostu szukam krótkiego przeglądu GAC dla laika, a nie linku, proszę.

Nosrama
źródło

Odpowiedzi:

177

Zgadza się, więc w zasadzie jest to sposób na zapewnienie globalnej dostępności bibliotek DLL bez obaw o konflikty. Nigdy więcej DLL Hell. Każda architektura i wersja ma swoje własne miejsce do życia.

Ma również swój własny sposób przeglądania w Eksploratorze, więc jeśli idziesz do

C: \ Windows \ assembly

W Eksploratorze Windows wyświetla listę wszystkich bibliotek DLL.

Ale jeśli odpalisz cmd, możesz zobaczyć, jak to naprawdę ma strukturę:

C: \ Users \ tritter> cd C: \ Windows \ assembly

C: \ Windows \ assembly> reż

 Katalog C: \ Windows \ assembly

07/20/2009 14:18 <DIR> GAC
17/17/2009 16:22 <DIR> GAC_32
17/17/2009 16:22 <DIR> GAC_64
17/17/2009 16:22 <DIR> GAC_MSIL
 ...fantastyczna okazja...
               0 plików 0 bajtów
               9 Dir (s) 90.538.331.680 bajtów wolnych

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ assembly \ GAC_64> reż

 Katalog C: \ Windows \ assembly \ GAC_64

17.06.2009, 16:22 <DIR>.
17/17/2009 16:22 <DIR> ..
01/19/2008 09:54 <DIR> blbproxy
 ...fantastyczna okazja...
01/19/2008 09:54 <DIR> srmlib
01/19/2008 06:11 <DIR> System.Data
01/19/2008 06:11 <DIR> System.Data.OracleClient
 ...fantastyczna okazja...
               0 plików 0 bajtów
              34 Dir (s) 90.538.331.680 bajtów wolnych

C: \ Windows \ assembly \ GAC_64> cd System.Data

C: \ Windows \ assembly \ GAC_64 \ System.Data> reż
 Katalog C: \ Windows \ assembly \ GAC_64 \ System.Data

01/19/2008 06:11 <DIR>.
01/19/2008 06:11 <DIR> ..
04/11/2009 12:20 <DIR> 2.0.0.0__b77a5c561934e089
               0 plików 0 bajtów
               3 Dir (s) 90.538.331.680 bajtów wolnych

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> reż

 Katalog C: \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

04/11/2009 12:20 <DIR>.
04/11/2009 12:20 <DIR> ..
04/11/2009 12:12 3 008 512 System.Data.dll
               1 plik (i) 3 008 512 bajtów
               2 Dir (s) 90,538 3131,680 bajtów za darmo

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

Tutaj możesz zobaczyć wersję 2.0.0.0__b77a5c561934e089 System.Data.

DLL jest identyfikowany przez 5 części:

  1. Imię
  2. Wersja
  3. Architektura
  4. Kultura
  5. Klucz publiczny

Chociaż pierwsze 3 są na ogół duże.

Tom Ritter
źródło
12
Otrzymujesz +1 za wspomnienie, że jest to nowy sposób globalnego odwoływania się do plików .dll, unikając jednocześnie „dll hell”. (Byłaby jeszcze lepsza odpowiedź, gdybyś zagłębił się w to, czym jest piekło dll i jak GAC sobie z tym poradzi ... masz podstawowy zarys tego ... ale po prostu naprężyłbym wstawka struktury katalogów i dodaj trochę, jak dll jest identyfikowany i unikalny) Nie chcę brzmieć zbyt negatywnie ... Dałem +1!
Beska
Tylko nie podawaj linku:]. Pytanie o twoją odpowiedź, czy „3. Architektura” jest określona w nazwie katalogu „GAC_64”? I czy w tym przypadku Kultura jest pusta - wartość, która byłaby między podkreśleniem „__”?
Danny Bullis
2
Czy GAC istnieje tylko dla aplikacji .NET?
Zach Smith
93

GAC = globalna pamięć podręczna zestawu

Rozbijmy to:

  • globalny - dotyczy całej maszyny
  • asembler - co .NET nazywa bibliotekami kodów (DLL)
  • pamięć podręczna - miejsce do przechowywania rzeczy w celu uzyskania szybkiego / wspólnego dostępu

Tak więc GAC musi być miejscem do przechowywania bibliotek kodów, aby były dostępne dla wszystkich aplikacji uruchomionych na komputerze.

Steven A. Lowe
źródło
64

Pamięć podręczna globalnego zestawu

Każdy komputer, na którym jest zainstalowane środowisko uruchomieniowe wspólnego języka, ma pamięć podręczną kodu dla całego komputera, zwaną pamięcią globalną zestawu. Pamięć podręczna zestawów globalnych przechowuje zestawy specjalnie przeznaczone do współdzielenia przez kilka aplikacji na komputerze.

Powinieneś współdzielić zespoły, instalując je w globalnej pamięci podręcznej zestawów tylko wtedy, gdy jest to konieczne. Zgodnie z ogólną wytyczną należy zachować prywatność zależności między zestawami i zlokalizować zestawy w katalogu aplikacji, chyba że współużytkowanie zestawu jest wyraźnie wymagane. Ponadto nie jest konieczne instalowanie zestawów w globalnej pamięci podręcznej zestawów, aby były one dostępne dla interfejsu COM lub kodu niezarządzanego.

Rzeczy, które zawiera MSDN, mogą cię zaskoczyć ... zwykle możesz przeczytać to jak artykuł. Proste i najważniejsze elementy u góry, misterne szczegóły głębiej. To z pewnością wyjaśnia to lepiej niż mogłem.

Zauważ, że Visual Studio wyświetla wszystkie biblioteki DLL w GAC na karcie .NET w oknie Odnośniki . (Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz Dodaj odniesienie.) To powinno dać ci bardziej namacalny pomysł.

Noldorin
źródło
Nie powiedział linku, chciał wyjaśnienia własnymi słowami.
user142350,
W oryginalnej wersji jego postu (myślę, że szybko go zredagował), nie zostało to określone!
Noldorin,
15
Ponadto słowa MSDN zawsze będą lepsze i dokładniejsze. :)
Noldorin,
18

Scentralizowana biblioteka DLL.

Jeff
źródło
12

Global Assembly Cache (GAC) to folder w katalogu Windows do przechowywania zestawów .NET, które są specjalnie przeznaczone do współdzielenia przez wszystkie aplikacje uruchomione w systemie. Zespoły mogą być współużytkowane przez wiele aplikacji na komputerze, rejestrując je w globalnej pamięci podręcznej zestawów (GAC). GAC to lokalna pamięć podręczna zestawów obsługiwana przez system .NET Framework.

Kalyan Raj S.
źródło
11

Aplikacja Exe, przede wszystkim, odniesienia z bieżącego katalogu do podkatalogu. A potem katalog systemowy. Katalog systemowy VS6.0 był ..windows / system32. Katalog systemowy .NET jest podobny do poniższej ścieżki GAC.

  1. Ścieżka GAC

    1) C: \ Windows \ Assembly (dla .NET 2.0 ~ 3.5)

    2) C: \ Windows \ Microsoft.NET \ assembly (dla .NET 4.0)

  2. Jak zainstalować zestaw w GAC (jako administrator)

    1) Przeciągnij i upuść

    2) Użyj GacUtil.exe z wierszem polecenia programu Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Uwaga: Aby zainstalować zestaw w GAC, zestaw musi mieć silną nazwę. W przeciwnym razie pojawia się taki błąd: Niepowodzenie dodania zestawu do pamięci podręcznej: Spróbuj zainstalować zestaw bez silnej nazwy.
  3. Jak odinstalować zestaw z GAC (jako administrator)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Uwaga: nie ma rozszerzenia, .dll. Wersję i PublickeyToken można pominąć i sprawdzić w zestawie GAC.
Oprogramowanie INS
źródło
5

To tak, jakby rejestr COM został wykonany poprawnie w odniesieniu do plików fizycznych, a także ich interfejsu i informacji o lokalizacji. W COM pliki były wszędzie ze scentralizowanymi metadanymi. GAC centralizuje strzelanie z huku.

ProfK
źródło
5

GAC (Global Assembly Cache) to miejsce, w którym znajdują się wszystkie udostępnione zestawy .NET.

fdsf
źródło