visual util the studio register installed first cache .net gac

.net - util - visual studio gac location



¿Por qué NO debería usar el GAC? (7)

Se han formulado algunas preguntas a lo largo de esta línea stackoverflow tales como ¿Cuáles son las ventajas y desventajas de usar GAC y cuándo y cuándo no instalar en el GAC? y algunas personas lo han preguntado en la web en línea . No puedo argumentos convincentes para no usar el GAC. Estoy seguro de que soy ingenuo, pero parece que hay más beneficios (como el rendimiento y el control de versiones) que usar el GAC y luego no usarlo.

¿Por qué NO debería usar el GAC?


En ocasiones, en los sitios web alojados no tiene control sobre el GAC, y algunos proveedores de hosting no le permitirán instalar ningún ensamblado en el GAC. Me he encontrado con esto antes y es un gran dolor.


Si desea una implementación menos intrusiva de su aplicación. Al instalar solo en su directorio de aplicaciones, puede copiar el despliegue y la limpieza muy fácilmente.


Si tiene una aplicación pequeña que no requiere tantos recursos, no me gustaría instalar archivos en el GAC.

Crearía otra dependencia que necesitaría verificar en mi desinstalación y ha habido mucha pena expresada en el pasado sobre los programas que abusan del registro.

También sería un poco más fácil para la depuración / mantenimiento ya que podría verificar fácilmente que todas las bibliotecas apropiadas se encuentren en la ruta ejecutable de la aplicación.


Chris Sells le da probablemente la mejor razón para evitar el GAC donde usted puede:

A lo que se reduce esto es a que cualquiera de los espacios compartidos para las actualizaciones, ya sea un COM CLSID, Windows / system32 o el GAC, es peligroso y debe evitarse. Y esta es la razón por la que el escenario de implementación de .NET preferido es "implementación de xcopy", es decir, tener su propia copia privada de cada DLL que pruebe e implemente con el resto de su aplicación.

"¡Ajá!" tu dices. "¡El GAC admite una versión múltiple de un ensamblado! Cuando se actualiza un foo.dll a v1.1, v1.0 se ubica justo al lado del mismo para que su aplicación no se rompa". Por supuesto, eso es absolutamente cierto. Pero si ese es el caso, ¿por qué te importa? Es decir, si hay un nuevo ensamblaje disponible pero tu aplicación no lo recoge, ¿qué diferencia hay?

"¡Ajá otra vez !, dices." ¡Puedo poner una política de editor en el GAC junto con mi ensamblaje para que las aplicaciones se actualicen automáticamente! "Eso también es cierto, pero ahora, como cualquiera de las estrategias de reemplazo de códigos de toda la máquina de antaño , estás al acecho de una gran responsabilidad: asegúrate de que tan cerca del 0% de las aplicaciones, conocidas o no, no se rompan. Esta es una gran responsabilidad y una que toma MS cientos de años-hombre en cada nuevo lanzamiento de .NET Framework. Y aun con esos cientos de años-hombre de prueba, todavía no siempre lo hacemos bien. Si esta es una responsabilidad de prueba con la que estás dispuesto a vivir, te admiro. Personalmente, no tengo la fortaleza moral para soportar esta carga.


¿Cuál es el uso de GAC?

i) Puede almacenar múltiples versiones del mismo ensamblaje en una máquina y ejecutarlas una al lado de la otra. ii) Almacenar los mismos ensamblajes en múltiples ubicaciones en una máquina usa almacenamiento adicional innecesario. Mantenerlos en un solo lugar reduce este costo. iii) Servir conjuntos en una máquina se simplifica porque solo tiene que actualizar una ubicación (el GAC) en lugar de buscar varias instancias de un ensamblaje almacenado en una máquina.


Tenemos una aplicación que tiene más de 50 ensamblajes .NET cargados en un momento dado y no usamos el GAC. Creo que el GAC es más útil si debe tener múltiples versiones de su aplicación ejecutándose al mismo tiempo, cada una de las cuales necesita cargar una versión diferente de la misma biblioteca compartida.

Incluso entonces, si las dos versiones de la aplicación están en directorios diferentes, mientras mantenga sus binarios separados, no necesita el GAC.

Siempre he pensado que es mucho más útil para alguien que crea un SDK / API, donde las diferentes versiones de su SDK pueden ser cargadas por múltiples aplicaciones y vivir en armonía. Entonces, si estás en este barco, entonces el GAC puede tener sentido.

Hay algunos casos complementarios que requieren el GAC (creo que los componentes .NET COM + deben estar en el GAC en algunos casos), pero creo que esos son un porcentaje pequeño de los casos.