¿Qué es el GAC en .NET?

187

Solo busco una breve descripción de GAC para un laico, no un enlace, por favor.

Nosrama
fuente

Respuestas:

177

Correcto, así que básicamente es una forma de mantener las DLL accesibles a nivel mundial sin preocuparse por los conflictos. No más DLL Hell. Cada arquitectura y versión tiene su propio lugar para vivir.

También tiene su propia forma de navegar en Explorer, así que si vas a

C: \ Windows \ ensamblaje

En Windows Explorer, enumera todas las DLL.

Pero si enciendes cmd, puedes ver cómo está realmente estructurado:

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

C: \ Windows \ ensamblaje> dir

 Directorio de C: \ Windows \ assembly

20/07/2009 02:18 PM <DIR> GAC
17/06/2009 04:22 PM <DIR> GAC_32
17/06/2009 04:22 PM <DIR> GAC_64
17/06/2009 04:22 PM <DIR> GAC_MSIL
 ...recorte...
               0 Archivo (s) 0 bytes
               9 Dir (s) 90,538,311,680 bytes gratis

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Directorio de C: \ Windows \ assembly \ GAC_64

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

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Directorio de C: \ Windows \ assembly \ GAC_64 \ System.Data

19/01/2008 06:11 AM <DIR>.
19/01/2008 06:11 AM <DIR> ..
04/11/2009 12:20 PM <DIR> 2.0.0.0__b77a5c561934e089
               0 Archivo (s) 0 bytes
               3 Dir (s) 90,538,311,680 bytes gratis

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

 Directorio de 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 archivo (s) 3,008,512 bytes
               2 Dir (s) 90,538,311,680 bytes gratis

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

Aquí puede ver la versión 2.0.0.0__b77a5c561934e089 de System.Data.

Una DLL se identifica por 5 partes:

  1. Nombre
  2. Versión
  3. Arquitectura
  4. Cultura
  5. Llave pública

Aunque los primeros 3 son generalmente los grandes.

Tom Ritter
fuente
12
Obtiene un +1 por mencionar que es una nueva forma de tener referencias globales .dlls evitando "dll hell". (Sería una respuesta aún mejor si entrases un poco de lo que es el infierno, y cómo el GAC lo soluciona ... tienes el resumen básico de esto ... pero yo simplemente me ajustaría la estructura del directorio insertada, y agregue un poco de cómo se identifica el dll y es único) No quiero parecer demasiado negativo ... ¡Di +1!
Beska
Simplemente no proporcione un enlace:]. Pregunta sobre su respuesta, ¿es la "3. Arquitectura" especificada por el nombre del directorio "GAC_64"? ¿Y la cultura en este caso está en blanco: el valor que estaría entre los caracteres de subrayado "__"?
Danny Bullis
2
¿Existe GAC solo para aplicaciones .NET?
Zach Smith
93

GAC = Caché de Asamblea Global

Vamos a desglosarlo:

  • global: se aplica a toda la máquina
  • ensamblado: lo que .NET llama sus bibliotecas de códigos (DLL)
  • caché: un lugar para almacenar cosas para un acceso más rápido / común

Por lo tanto, el GAC debe ser un lugar para almacenar bibliotecas de código para que sean accesibles para todas las aplicaciones que se ejecutan en la máquina.

Steven A. Lowe
fuente
64

Caché de la Asamblea Global

Cada computadora donde está instalado Common Language Runtime tiene una memoria caché de código de toda la máquina llamada memoria caché de ensamblado global. El caché global de ensamblados almacena ensamblados específicamente designados para ser compartidos por varias aplicaciones en la computadora.

Debe compartir ensamblados instalándolos en la caché global de ensamblados solo cuando lo necesite. Como pauta general, mantenga las dependencias de ensamblado privadas y ubique los ensamblados en el directorio de la aplicación a menos que se requiera explícitamente compartir un ensamblado. Además, no es necesario instalar ensamblados en la memoria caché global de ensamblados para que sean accesibles para interoperabilidad COM o código no administrado.

Lo que contiene MSDN puede sorprenderlo ... por lo general, puede leerlo como un artículo. Las partes sencillas y más importantes en la parte superior, los detalles intrincados más profundos. Ciertamente lo explica mejor que yo.

Tenga en cuenta que Visual Studio muestra todas las DLL en el GAC en la pestaña .NET de la ventana Referencias . (Haga clic con el botón derecho en un proyecto en el Explorador de soluciones y seleccione Agregar referencia). Esto debería darle una idea más tangible.

Noldorin
fuente
Dijo que no había enlace, quería una explicación con tus propias palabras.
user142350
En la versión original de su publicación (creo que la editó rápidamente), ¡eso no se especificó!
Noldorin
15
Además, las palabras de MSDN siempre serán mejores y más precisas. :)
Noldorin
18

Biblioteca DLL centralizada.

Jeff
fuente
12

El Global Assembly Cache (GAC) es una carpeta en el directorio de Windows para almacenar los ensamblados .NET que están específicamente designados para ser compartidos por todas las aplicaciones ejecutadas en un sistema. Los ensamblajes se pueden compartir entre múltiples aplicaciones en la máquina registrándolos en la caché global de ensamblados (GAC). GAC es una caché local de ensamblajes de todo el equipo mantenida por .NET Framework.

Kalyan Raj S
fuente
11

Exe Application, en primer lugar, referencias de un directorio actual a un subdirectorio. Y luego, directorio del sistema. El directorio del sistema VS6.0 era ..windows / system32. El directorio del sistema .NET es como la siguiente ruta de GAC.

  1. Camino GAC

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

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

  2. Cómo instalar un ensamblaje en GAC (como administrador)

    1) Arrastrar y soltar

    2) Use GacUtil.exe con el símbolo del sistema de Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Nota: Para instalar un ensamblaje en el GAC, el ensamblaje debe tener un nombre sólido. De lo contrario, obtendrá un error como este: Error al agregar el ensamblado a la memoria caché: intente instalar un ensamblado sin un nombre seguro.
  3. Cómo desinstalar un ensamblaje de GAC (como administrador)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Nota: no tiene extensión, .dll. Version y PublickeyToken se pueden omitir y verificar en el ensamblado GAC.
Software INS
fuente
5

Es como el registro COM hecho correctamente, con respecto a los archivos físicos, así como a su interfaz e información de ubicación. En COM, los archivos estaban en todas partes, con metadatos centralizados. El GAC centraliza el disparo explosivo.

ProfK
fuente
5

GAC (Global Assembly Cache) es donde residen todos los ensamblados .NET compartidos.

fdsf
fuente