La caché de ensamblados global ( GAC ) es una caché de ensamblados CLI para toda la máquina para la infraestructura de lenguaje común (CLI) en .NET Framework de Microsoft. El enfoque de tener un repositorio central especialmente controlado aborda las fallas [ cita requerida ] en el concepto de biblioteca compartida y ayuda a evitar los problemas de otras soluciones que llevaron a inconvenientes como el infierno de DLL .
Los ensambles que residen en el GAC deben cumplir con un esquema de control de versiones específico que permita la ejecución en paralelo de diferentes versiones de código. En concreto, dichos ensambles deben tener un nombre seguro .
Hay dos formas de interactuar con el GAC: la herramienta de caché de ensamblados global (gacutil.exe) y el visor de caché de ensamblados (shfusion.dll).
gacutil.exe es una utilidad de línea de comandos más antigua que se envió con .NET 1.1 y todavía está disponible con el .NET SDK. [1]
Se puede comprobar la disponibilidad de un ensamblaje compartido en GAC utilizando el comando:
gacutil.exe /l <nombreDeEnsamblaje>
Se puede registrar un ensamblaje compartido en el GAC utilizando el comando:
gacutil.exe /i <nombreDeEnsamblaje>
O copiando un archivo de ensamblaje en la siguiente ubicación:
%windir%\ensamblaje\
Tenga en cuenta que para .NET 4.0 la ubicación de GAC ahora es:
%windir%\Microsoft.NET\ensamblaje\
Se describirán brevemente otras opciones para esta utilidad si utiliza el indicador /?, es decir:
gacutil.exe/?
La interfaz más nueva, el Visor de caché de ensamblajes, está integrada en el Explorador de Windows . [2] Al explorar %windir%\assembly\
(por ejemplo, C:\WINDOWS\assembly
) o %WINDIR%\Microsoft.NET\assembly
, se muestran los ensamblajes contenidos en la caché junto con sus versiones, cultura, token de clave pública y arquitectura de procesador. Los ensamblajes se instalan arrastrándolos y soltándolos, y se desinstalan seleccionándolos y presionando la tecla eliminar o usando el menú contextual .
Con el lanzamiento de .NET Framework 4, la extensión de shell del Visor de caché de ensamblajes quedó obsoleta. [3]
Una computadora tiene dos ensamblajes CLI , ambos llamados AssemblyA , pero uno es la versión 1.0 y el otro es la versión 2.0. Dado que se requiere que ambos se compilen en un archivo llamado AssemblyA, no pueden existir en el mismo directorio dentro del sistema de archivos FAT32 . En cambio, el sistema de archivos virtual del GAC puede ser utilizado por programas que necesitan usar cada versión del ensamblaje específicamente.
El GAC como construcción no existe realmente dentro del sistema operativo Windows. Se implementa y administra mediante la CLI. Las carpetas dentro de %systemroot% llamadas assembly y Microsoft.NET\assembly (para .NET 4.0) contienen todos los ensamblados disponibles globalmente con nombres de archivo administrados para que se puedan incluir los tokens de clave pública y de versión. Por lo tanto, cada versión puede existir dentro de la misma ubicación y ser llamada sin necesidad de que las versiones posteriores conserven las ubicaciones de los puntos de entrada de código como de costumbre. El Explorador de Windows permite la instalación de ensamblados mediante arrastrar y soltar en esta carpeta solo si, de lo contrario, se permitiría su instalación desde la línea de comandos.
Una aplicación que llama puede especificar una versión de un ensamblaje al hacer referencia a él, de modo que el tiempo de ejecución puede simplemente referirse al nombre del archivo para usar el correcto.
El mecanismo de caché de ensamblaje global ayuda a evitar el infierno de las DLL antiguas , pero aún tiene algunos inconvenientes, como: [4]