La caché de ensamblado global ( GAC ) es una caché de ensamblado de CLI en todo el equipo para Common Language Infrastructure (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 las trampas de otras soluciones que llevaron a inconvenientes como el infierno de las DLL .
Requisitos
Los ensamblados que residen en el GAC deben adherirse a un esquema de control de versiones específico que permita la ejecución en paralelo de diferentes versiones de código. Específicamente, dichos ensamblajes deben tener un nombre firme .
Uso
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).
Herramienta de caché de ensamblados global
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 .NET SDK. [1]
Se puede verificar la disponibilidad de un ensamblado compartido en GAC usando el comando:
gacutil.exe / l
Uno puede registrar un ensamblado compartido en el GAC usando el comando:
gacutil.exe / i
O copiando un archivo de ensamblaje en la siguiente ubicación:
% windir% \ montaje \
Tenga en cuenta que para .NET 4.0 la ubicación de GAC ahora es:
% windir% \ Microsoft.NET \ ensamblaje \
Otras opciones para esta utilidad se describirán brevemente si usa /? bandera, es decir:
gacutil.exe /?
Visor de caché de ensamblados
La interfaz más nueva, el Visor de caché de ensamblados, está integrada en el Explorador de Windows . [2] Navegando %windir%\assembly\
(por ejemplo, C:\WINDOWS\assembly
) o %WINDIR%\Microsoft.NET\assembly
, muestra los ensamblados contenidos en el caché junto con sus versiones, cultura, token de clave pública y arquitectura del procesador. Los ensamblados se instalan arrastrando y soltando y se desinstalan seleccionando y presionando la tecla Eliminar o usando el menú contextual .
Con el lanzamiento de .NET Framework 4, la extensión de shell Assembly Cache Viewer está obsoleta. [3]
Ejemplo de uso
Una computadora tiene dos ensamblados 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 ensamblado específicamente.
Implementación
El GAC como construcción no existe realmente dentro del sistema operativo Windows. Está implementado y administrado por la CLI. Las carpetas dentro de % systemroot% named 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 la versión y los tokens de clave pública. Por lo tanto, cada versión puede existir dentro de la misma ubicación y ser llamada sin necesidad de versiones posteriores para conservar las ubicaciones de los puntos de entrada del código como de costumbre. El Explorador de Windows permite la instalación de ensamblajes mediante la operación de arrastrar y soltar en esta carpeta solo si, de lo contrario, se permitiría instalarlos desde la línea de comandos.
Una aplicación que realiza la llamada puede especificar una versión de un ensamblado al hacer referencia a él, por lo que el tiempo de ejecución puede simplemente hacer referencia al nombre de archivo para usar el correcto.
Trampas
El mecanismo de caché de ensamblado global ayuda a evitar el infierno de DLL más antiguo , pero aún tiene algunos inconvenientes, como: [4]
- De forma predeterminada, las aplicaciones solo se ejecutarán con la versión de .NET Framework utilizada para compilarlas, lo que puede hacer que la aplicación falle en máquinas con versiones más nuevas de .NET Framework instaladas, incluso cuando la aplicación normalmente se ejecutaría correctamente con la versión más nueva. versión.
- A veces es necesario utilizar la compilación condicional si algunas de las llamadas principales .NET (utilizadas en la aplicación) solo son compatibles con algunas versiones del marco.
- Las aplicaciones .NET que se basan en el código nativo corren el riesgo de incompatibilidades, incluso con el mecanismo GAC.
- Cada ensamblado que se agrega al GAC debe tener un nombre seguro . El proceso de hacer una asamblea "fuertemente nombrada" puede ser bastante doloroso en algunas situaciones. Por ejemplo, si un ensamblado depende de otro ensamblado que no tiene un nombre seguro, no se puede registrar en el GAC. En los casos en los que el código del ensamblado de terceros no está en posesión del programador, transformar el ensamblado para que tenga un nombre fuerte puede ser imposible.
- La búsqueda de archivos mediante las API estándar de Windows no permite la selección de archivos DLL ubicados en la carpeta "ensamblado" cuando el Explorador muestra la vista fácil de usar del GAC.
Ver también
Referencias
- ^ "Herramienta de caché de ensamblados global (Gacutil.exe)" . Redmond, Washington : Microsoft Corporation . Consultado el 27 de mayo de 2010 .
- ^ "Visor de caché de ensamblado (Shfusion.dll)" . Redmond, Washington : Microsoft Corporation . Consultado el 27 de mayo de 2010 .
- ^ "Cómo: ver el contenido de la caché de ensamblados global" . Redmond, Washington : Microsoft Corporation . Consultado el 22 de julio de 2010 .
- ^ John, Mueller (11 de febrero de 2005). "Diez trampas de aplicaciones administradas que eliminan la compatibilidad de versiones" . devsource.com. Archivado desde el original el 21 de enero de 2013 . Consultado el 26 de enero de 2008 .