197 votes

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

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

187voto

Tom Ritter Points 44352

Bon, en gros, c'est un moyen de garder les DLL accessibles globalement sans se soucier des conflits. Plus d'enfer de DLL. Chaque architecture et version a son propre endroit pour vivre.

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

C:\Windows\assembly

Dans l'explorateur Windows, il y a une liste de toutes les DLLs.

Mais si vous allumez cmd vous pouvez voir comment il est réellement structuré :

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

C:\\Windows\\assembly>dir

 Directory of C:\\Windows\\assembly

07/20/2009  02:18 PM    <DIR>          GAC
06/17/2009  04:22 PM    <DIR>          GAC\_32
06/17/2009  04:22 PM    <DIR>          GAC\_64
06/17/2009  04:22 PM    <DIR>          GAC\_MSIL
 ...snip...
               0 File(s)              0 bytes
               9 Dir(s)  90,538,311,680 bytes free

C:\\Windows\\assembly>cd GAC\_64

C:\\Windows\\assembly\\GAC\_64>dir

 Directory of C:\\Windows\\assembly\\GAC\_64

06/17/2009  04:22 PM    <DIR>          .
06/17/2009  04:22 PM    <DIR>          ..
01/19/2008  09:54 AM    <DIR>          blbproxy
 ...snip...
01/19/2008  09:54 AM    <DIR>          srmlib
01/19/2008  06:11 AM    <DIR>          System.Data
01/19/2008  06:11 AM    <DIR>          System.Data.OracleClient
 ...snip...
               0 File(s)              0 bytes
              34 Dir(s)  90,538,311,680 bytes free

C:\\Windows\\assembly\\GAC\_64>cd System.Data

C:\\Windows\\assembly\\GAC\_64\\System.Data>dir
 Directory of C:\\Windows\\assembly\\GAC\_64\\System.Data

01/19/2008  06:11 AM    <DIR>          .
01/19/2008  06:11 AM    <DIR>          ..
04/11/2009  12:20 PM    <DIR>          2.0.0.0\_\_b77a5c561934e089
               0 File(s)              0 bytes
               3 Dir(s)  90,538,311,680 bytes free

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 of 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 PM         3,008,512 System.Data.dll
               1 File(s)      3,008,512 bytes
               2 Dir(s)  90,538,311,680 bytes free

C:\\Windows\\assembly\\GAC\_64\\System.Data\\2.0.0.0\_\_b77a5c561934e089>

Vous pouvez voir ici 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 trois premiers soient généralement les plus importants.

14 votes

Vous obtenez un +1 pour avoir mentionné que c'est une nouvelle façon de référencer globalement les .dll tout en évitant "l'enfer des dlls". (La réponse serait encore meilleure si vous expliquiez un peu ce qu'est l'enfer des dll et comment le GAC le contourne... vous en avez les grandes lignes... mais je resserrerais l'encart sur la structure des répertoires et j'ajouterais un peu sur la façon dont la dll est identifiée et unique) Je ne veux pas paraître trop négatif... j'ai donné +1 !

0 votes

Mais ne fournissez pas de lien :]. Question sur votre réponse, est-ce que le "3. Architecture" est spécifié par le nom du répertoire "GAC_64" ? Et dans ce cas, la culture est-elle vide - la valeur qui se trouverait entre les caractères de soulignement "__" ?

2 votes

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

94voto

Steven A. Lowe Points 40596

GAC = Global Assembly Cache

Faisons le point :

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

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

64voto

Noldorin Points 67794

Cache d'assemblage global

Chaque ordinateur sur lequel est installé le d'exécution du langage commun est installé a un cache de code à l'échelle de la machine appelé cache d'assemblage global. Le cache d'assemblage global d'assemblage stocke les assemblages spécifiquement désignés pour être partagés par plusieurs applications sur l'ordinateur l'ordinateur.

Vous devez partager les assemblages en les installant dans le cache global des que lorsque vous en avez besoin. En règle générale, gardez les dépendances des assemblages privées, et localisez les assemblages dans le répertoire de l'application sauf si le partage d'un assemblage ne soit explicitement requis. En outre, il n'est pas nécessaire d'installer dans le cache global des assemblages pour les rendre accessibles à COM ou à du code non géré.

Les choses que MSDN contient peuvent vous surprendre... vous pouvez généralement le lire comme un article. Les éléments les plus simples et les plus importants en haut, les détails plus complexes plus bas. Il l'explique certainement mieux que je ne pourrais le faire.

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

0 votes

Il a dit pas de lien, il voulait une explication dans vos propres mots.

0 votes

Dans la version originale de son post (je crois qu'il l'a édité rapidement), ce n'était pas précisé !

15 votes

De plus, les mots de MSDN seront toujours meilleurs et plus précis :)

21voto

Jeff Points 1873

Bibliothèque DLL centralisée.

6voto

ProfK Points 8761

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X