Pregunta: ¿Cuándo debo implementar mis ensamblajes en el GAC?
Respuesta: Nunca
real, honesto, respuesta real: Casi nunca
Discusión
de Salto a las cosas en la GAC cuando múltiples aplicaciones en la máquina utilizará la ensamblado, y cuando el ensamblaje es fundamental (es probable que lo utilicen varias aplicaciones), cuando está firmado y cuando casi no se espera que actualice ese ensamblaje. Tal vez agregar eso, cuando tener múltiples versiones independientes de un DLL implementado con cada aplicación en realidad sería perjudicial.
Un ejemplo de esto último es: supongamos que tiene 2 aplicaciones independientes, desarrolladas independientemente y desplegadas de forma independiente. Sin embargo, existe la posibilidad de que se intercomuniquen. Intercambiarán ... algo ... por .NET Remoting en la máquina local. Si tiene un único ensamblaje en el GAC, estas aplicaciones tienen la seguridad de que la intercomunicación solo funcionará. Sin embargo, si cada uno de ellos tiene una versión separada de un ensamblaje, es posible que no puedan intercambiar objetos. Esto es tan raro que probablemente no lo necesite. Si no estás seguro, entonces no lo necesitas.
El escenario GAC base es la biblioteca de clases de .NET Base. Estos ensamblados son enviados por Microsoft. Ellos son autoritativos. Ellos son fundamentales y firmado Raramente cambian. Todas las aplicaciones deben usar las mismas copias de esas DLL. Por lo tanto, pertenecen al GAC.
Por el contrario, su DLL de aplicación no son de Microsoft, no son fundamentales, y probablemente no se hayan firmado. Cambian más a menudo, y solo hay algunas aplicaciones (¡tal vez una sola!) Que usan cada DLL. Sin GAC.
me podría imaginar un dispositivo de hardware, digamos que una cámara digital, que se instala un ensamblado de .NET para permitir la programación. Ese es un escenario donde la asamblea podría encajar bien en el GAC. Permite que las aplicaciones .NET arbitrarias accedan a la cámara digital mediante programación.
Su ejemplo log4net no es, en mi opinión, lo suficiente como para justificar poner el ensamblado en la GAC. Imagine el escenario en el que una de las aplicaciones obtiene una actualización y, como parte de la actualización, utiliza una nueva versión de log4net. ¿Ahora que? ¿Debería colocarse el nuevo ensamblaje de log4net en el GAC? Probablemente no.
Toda la idea de compartir archivos DLL entre aplicaciones se basaba en la premisa de que la memoria y el almacenamiento en disco eran escasos. Érase una vez, eso fue cierto. No es verdad, por más tiempo. En caso de duda, no use el GAC.
+1 Cuando se empieza con.NET pensamos que poner nuestras asambleas marco en el GAC era lo correcto. Estuvimos equivocados. Esto complica las cosas tanto para los desarrolladores como para las instalaciones de control de calidad y de los clientes. Para obtener los beneficios de las versiones paralelas del mismo ensamblaje en el GAC, debe definir explícitamente los números de versión en los archivos de configuración, que es un verdadero P.I.T.A para todos. Simplemente no lo hagas. – si618
Estoy de acuerdo. Estamos atrapados con algunas bibliotecas en nuestro GAC y realmente es un problema, no solo para el desarrollo sino también para la implementación, porque necesita la administración directamente en el servidor de producción para instalar cosas en el GAC y no siempre es posible. –
Oh Dios mío ODIO el gac. +1 para la primera línea de esta respuesta. –