2009-02-11 22 views
22

Ha habido un par de preguntas a lo largo de esta línea stackoverflow como What are the advantages and disadvantages of using the GAC y When and when-not to install into the GAC? y algunas personas han preguntado sobre la web expamle. 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 DEBO usar el GAC?

¿Por qué NO debo usar el GAC?

Respuesta

43

Chris Sells da probablemente the best reason for avoiding the GAC donde puede:

Lo que esto se reduce a es que cualquiera de los puntos compartidos para las actualizaciones, si se trata de una aplicación COM CLSID, windows \ system32 o el GAC, son peligroso y debe ser evitado. Y esta es la razón por la que el escenario preferido de implementación de .NET 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.

"Aha!" tu dices. "¡El GAC admite múltiples versiones 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 entre en". 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?

"Aha nuevo !, que dicen. 'Puedo poner una política editorial en la GAC ​​junto con mi conjunto de manera que las aplicaciones están actualizan automáticamente!' Eso es cierto, también, pero ahora, al igual que cualquiera de la máquina- amplias estrategias de reemplazo de código de antaño, usted está al borde de una gran responsabilidad: asegurarse de que 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 que estás dispuesto a vivir con, te admiro. Personalmente, no tengo la fortaleza moral para soportar esta carga.

1

En ocasiones, en los sitios web alojados usted 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.

3

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.

2

Si tiene una aplicación pequeña que no requiere demasiados recursos, entonces 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.

6

Tenemos una aplicación que tiene 50+ ensamblados .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 se encuentran en directorios diferentes, mientras mantenga sus binarios separados, no necesitará 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 cargarse en múltiples aplicaciones y vivir en armonía. Entonces, si estás en este barco, entonces el GAC puede tener sentido.

Existen algunos casos adicionales 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.

2

¿Cuál es el uso de GAC?

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