Qu'est-ce que le GAC dans .NET?


188

Je cherche juste un bref aperçu de GAC pour un profane, pas un lien s'il vous plaît.

Réponses:


179

Oui, c'est donc un moyen de garder les DLL globalement accessibles sans se soucier des conflits. Fini l'enfer des DLL. Chaque architecture et version a son propre lieu de vie.

Il a également sa propre façon de le parcourir dans l'Explorateur, donc si vous allez à

C: \ Windows \ assembly

Dans l'explorateur Windows, il répertorie toutes les DLL.

Mais si vous allumez cmd, vous pouvez voir comment c'est vraiment structuré:

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

C: \ Windows \ assembly> dir

 Répertoire de C: \ Windows \ assembly

20/07/2009 14h18 <DIR> GAC
17/06/2009 16h22 <DIR> GAC_32
17/06/2009 16h22 <DIR> GAC_64
17/06/2009 16h22 <DIR> GAC_MSIL
 ...couper...
               0 fichier (s) 0 octets
               9 Dir (s) 90,538,311,680 octets libres

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Répertoire de C: \ Windows \ assembly \ GAC_64

17/06/2009 16h22 <DIR>.
17/06/2009 16h22 <DIR> ..
19/01/2008 09h54 <DIR> blbproxy
 ...couper...
19/01/2008 09h54 <DIR> srmlib
19/01/2008 06:11 AM <DIR> Données système
19/01/2008 06:11 AM <DIR> System.Data.OracleClient
 ...couper...
               0 fichier (s) 0 octets
              34 Dir (s) 90,538,311,680 octets libres

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Répertoire de C: \ Windows \ assembly \ GAC_64 \ System.Data

19/01/2008 06h11 <DIR>.
19/01/2008 06h11 <DIR> ..
11/04/2009 12h20 <DIR> 2.0.0.0__b77a5c561934e089
               0 fichier (s) 0 octets
               3 Dir (s) 90,538,311,680 octets libres

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

 Répertoire de C: \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

11/04/2009 12h20 <DIR>.
11/04/2009 12h20 <DIR> ..
11/04/2009 12h12 3,008,512 System.Data.dll
               1 fichier (s) 3,008,512 octets
               2 Dir (s) 90,538,311,680 octets libres

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

Ici vous pouvez voir la version 2.0.0.0__b77a5c561934e089 de System.Data.

Une DLL est identifiée par 5 parties:

  1. Nom
  2. Version
  3. Architecture
  4. Culture
  5. Clé publique

Bien que les 3 premiers soient généralement les plus gros.


13
Vous obtenez un +1 pour avoir mentionné que c'est une nouvelle façon d'avoir globalement des références .dll tout en évitant "l'enfer des dll". (Ce serait une réponse encore meilleure si vous expliquiez un tout petit peu ce qu'est l'enfer des DLL, et comment le GAC le contournera ... vous en avez les grandes lignes ... mais je voudrais juste resserrer l'encart de la structure du répertoire, et ajoutez un peu de la façon dont la dll est identifiée et unique)
Beska

Ne fournissez pas de lien:]. Question concernant votre réponse, est-ce que "3. Architecture" est spécifié par le nom du répertoire "GAC_64"? Et la culture dans ce cas est-elle vide - la valeur qui se trouverait entre les traits de soulignement «__»?
Danny Bullis

2
Le GAC n'existe-t-il que pour les applications .NET?
Zach Smith

94

GAC = Global Assembly Cache

Décomposons-le:

  • global - s'applique à l'ensemble de la machine
  • assembly - ce que .NET appelle ses bibliothèques de code (DLL)
  • cache - un endroit pour stocker des choses pour un accès plus rapide / commun

Le GAC doit donc être un endroit pour stocker les bibliothèques de code afin qu'elles soient accessibles à toutes les applications exécutées sur la machine.


64

Cache d'assemblage global

Chaque ordinateur sur lequel le Common Language Runtime est installé dispose d'un cache de code à l'échelle de l'ordinateur appelé le Global Assembly Cache. Le Global Assembly Cache stocke les assemblys spécifiquement désignés pour être partagés par plusieurs applications sur l'ordinateur.

Vous devez partager des assemblys en les installant dans le Global Assembly Cache uniquement lorsque vous en avez besoin. En règle générale, gardez les dépendances d'assembly privées et recherchez les assemblys dans le répertoire de l'application, sauf si le partage d'un assembly est explicitement requis. En outre, il n'est pas nécessaire d'installer des assemblys dans le Global Assembly Cache pour les rendre accessibles à l'interopérabilité COM ou au code non managé.

Ce que contient MSDN peut vous surprendre ... vous pouvez généralement le lire comme un article. Les éléments simples et les plus importants en haut, les détails complexes plus profondément. Cela explique certainement mieux que je ne pourrais.

Notez que Visual Studio affiche toutes les DLL du GAC dans l'onglet .NET de la fenêtre Références . (Cliquez avec le bouton droit sur un projet dans l'Explorateur de solutions et sélectionnez Ajouter une référence.) Cela devrait vous donner une idée plus tangible.


Il a dit aucun lien, voulait une explication dans vos propres mots.
user142350

Dans la version originale de son article (je crois qu'il l'a édité rapidement), cela n'a pas été précisé!
Noldorin

15
En outre, les mots de MSDN seront toujours meilleurs et plus précis. :)
Noldorin


13

Le Global Assembly Cache (GAC) est un dossier dans le répertoire Windows pour stocker les assemblys .NET spécifiquement désignés pour être partagés par toutes les applications exécutées sur un système. Les assemblys peuvent être partagés entre plusieurs applications sur la machine en les enregistrant dans le Global Assembly Cache (GAC). GAC est un cache local d'assemblys à l'échelle de la machine géré par le .NET Framework.


11

L'application Exe, tout d'abord, fait référence à partir d'un répertoire courant vers un sous-répertoire. Et puis, répertoire système. Le répertoire système de VS6.0 était ..windows / system32. Le répertoire système .NET est semblable au chemin d'accès GAC ci-dessous.

  1. Chemin GAC

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

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

  2. Comment installer un assemblage dans GAC (en tant qu'administrateur)

    1) Glisser et déposer

    2) Utilisez GacUtil.exe avec l'invite de commandes Visual Studio

     gacutil -i [Path][Assembly Name].dll
    
    • Remarque: pour installer un assembly dans le GAC, l'assembly doit être fortement nommé. Sinon, vous obtenez une erreur comme celle-ci: Échec de l'ajout de l'assembly au cache: tentative d'installation d'un assembly sans nom fort.
  3. Comment désinstaller un assemblage de GAC (en tant qu'administrateur)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    
    • Remarque: n'a pas d'extention, .dll. La version et PublickeyToken peuvent être omis et vérifiés dans l'assembly GAC.

5

C'est comme si le registre COM était bien fait, en ce qui concerne les fichiers physiques ainsi que leurs informations d'interface et d'emplacement. Dans COM, les fichiers étaient partout, avec des métadonnées centralisées. Le GAC centralise le bang shoot.


5

GAC (Global Assembly Cache) est l'endroit où résident tous les assemblages .NET partagés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.