Cos'è il GAC in .NET?


187

Sto solo cercando una breve panoramica di GAC per un laico, non un link per favore.

Risposte:


177

Bene, quindi in pratica è un modo per mantenere le DLL accessibili a livello globale senza preoccuparsi dei conflitti. Niente più inferno DLL. Ogni architettura e versione ottiene il suo posto dove vivere.

Ottiene anche il suo modo di sfogliarlo in Explorer, quindi se vai a

C: \ Windows \ assembly

In Windows Explorer elenca tutte le DLL.

Ma se accendi cmd, puoi vedere come è veramente strutturato:

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

C: \ Windows \ assembly> dir

 Directory di 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
 ... snip ...
               0 File 0 byte
               9 Dir (s) 90.538.311.680 byte liberi

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Directory di C: \ Windows \ assembly \ GAC_64

17/06/2009 16:22 <DIR>.
17/06/2009 16:22 <DIR> ..
19/01/2008 09:54 AM <DIR> blbproxy
 ... snip ...
19/01/2008 09:54 AM <DIR> srmlib
19/01/2008 06:11 AM <DIR> Dati di sistema
19/01/2008 06:11 AM <DIR> System.Data.OracleClient
 ... snip ...
               0 File 0 byte
              34 Dir (s) 90.538.311.680 byte liberi

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Directory di C: \ Windows \ assembly \ GAC_64 \ System.Data

19/01/2008 alle 06:11 AM <DIR>.
19/01/2008 alle 06:11 AM <DIR> ..
04/11/2009 12:20 PM <DIR> 2.0.0.0__b77a5c561934e089
               0 File 0 byte
               3 Dir (s) 90.538.311.680 byte liberi

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

 Directory di C: \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

04/11/2009 12:20 PM <DIR>.
04/11/2009 12:20 PM <DIR> ..
04/11/2009 12:12 3.008.512 System.Data.dll
               1 File 3.008.512 byte
               2 Dir (s) 90.538.311.680 byte liberi

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

Qui puoi vedere la versione 2.0.0.0__b77a5c561934e089 di System.Data.

Una DLL è identificata da 5 parti:

  1. Nome
  2. Versione
  3. Architettura
  4. Cultura
  5. Chiave pubblica

Sebbene i primi 3 siano generalmente quelli più grandi.


12
Ottieni un +1 per menzionare che è un nuovo modo di fare riferimento a .dll a livello globale evitando "inferno dll". (Sarebbe una risposta ancora migliore se entrassi in una piccola parte di cosa diavolo è, e come il GAC lo aggira ... ne hai il profilo di base ... ma mi limiterei a stringere l'inserzione della struttura di directory e aggiungi un po 'di come la dll sia identificata e unica) Non voglio sembrare troppo negativo ... Ho dato +1!
Beska,

Basta non fornire un link:]. Domanda sulla tua risposta, la "3. Architecture" è specificata dal nome della directory "GAC_64"? E la Cultura in questo caso è vuota - il valore che sarebbe tra i caratteri di sottolineatura "__"?
Danny Bullis,

2
GAC esiste solo per le app .NET?
Zach Smith,

93

GAC = Global Assembly Cache

Analizziamolo:

  • globale: si applica all'intera macchina
  • assembly - ciò che .NET chiama le sue librerie di codici (DLL)
  • cache: un luogo in cui archiviare le cose per un accesso più rapido / comune

Quindi il GAC deve essere un posto dove archiviare le librerie di codici in modo che siano accessibili a tutte le applicazioni in esecuzione sulla macchina.


64

Global Assembly Cache

Ogni computer in cui è installato Common Language Runtime ha una cache di codice a livello di macchina denominata Global Assembly Cache. La Global Assembly Cache memorizza gli assembly specificatamente designati per essere condivisi da diverse applicazioni sul computer.

È necessario condividere gli assembly installandoli nella Global Assembly Cache solo quando è necessario. Come linea guida generale, mantenere private le dipendenze degli assembly e individuare gli assembly nella directory dell'applicazione a meno che non sia esplicitamente richiesta la condivisione di un assembly. Inoltre, non è necessario installare gli assembly nella Global Assembly Cache per renderli accessibili all'interoperabilità COM o al codice non gestito.

Le cose che contiene MSDN potrebbero sorprenderti ... di solito puoi leggerlo come un articolo. I pezzi più semplici e importanti nella parte superiore, i dettagli intricati più in profondità. Lo spiega sicuramente meglio di quanto potessi.

Si noti che Visual Studio visualizza tutte le DLL nel GAC nella scheda .NET della finestra Riferimenti . (Fare clic con il tasto destro del mouse su un progetto in Esplora soluzioni e selezionare Aggiungi riferimento.) Questo dovrebbe darti un'idea più tangibile.


Non ha detto link, ha voluto una spiegazione con parole tue.
user142350

Nella versione originale del suo post (credo che l'abbia modificato rapidamente), non è stato specificato!
Noldorin,

15
Inoltre, le parole di MSDN saranno sempre migliori e più accurate. :)
Noldorin,


12

Global Assembly Cache (GAC) è una cartella nella directory di Windows in cui sono archiviati gli assembly .NET specificatamente designati per essere condivisi da tutte le applicazioni eseguite su un sistema. Gli assembly possono essere condivisi tra più applicazioni sulla macchina registrandoli nella Global Assembly Cache (GAC). GAC è una cache locale di assembly gestita da .NET Framework.


11

Exe Application, prima di tutto, riferimenti da una directory corrente a una sottodirectory. E quindi, directory di sistema. La directory di sistema VS6.0 era ..windows / system32. La directory di sistema .NET è come il percorso GAC di seguito.

  1. Percorso GAC

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

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

  2. Come installare un assembly in GAC (come amministratore)

    1) Trascina selezione

    2) Utilizzare GacUtil.exe con il prompt dei comandi di Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Nota: per installare un assembly nel GAC, è necessario che l'assembly abbia un nome sicuro. Altrimenti viene visualizzato un errore simile al seguente: Errore durante l'aggiunta dell'assembly alla cache: tentativo di installare un assembly senza un nome sicuro.
  3. Come disinstallare un assembly da GAC ​​(come amministratore)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Nota: non ha estensione, .dll. La versione e PublickeyToken possono essere omesse e verificate nell'assieme GAC.

5

È come il registro COM fatto correttamente, per quanto riguarda i file fisici, nonché le loro informazioni di interfaccia e posizione. In COM, i file erano ovunque, con metadati centralizzati. Il GAC centralizza le riprese.


5

GAC (Global Assembly Cache) è dove risiede tutto l'assembly .NET condiviso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.