¿Cuál es la forma “correcta” de registrar / instalar una Asamblea en el GAC?

Parece haber muchas formas diferentes de registrar ensamblajes con el GAC, como en “funcionan”. Sin embargo, ¿cuál es la forma “correcta” de hacerlo?

En respuesta a Lou Franco (y gacutil):

Estoy usando Gacutil para el desarrollo, pero me parece que no es la forma correcta de instalarlo, ya que gacutil no está incluido en las utilidades .NET básicas anteriores a .NET 1.1; es solo una herramienta de desarrollo.

Adicional: Gacutil (como se ve en las respuestas a continuación) no es redistribuible y, por lo tanto, no debe usarse en ninguna aplicación que pretenda ofrecer a personas que no sean desarrolladores. AKA, clientes. Vea esta publicación del blog (y comentarios) de Aaron Stebner .

En respuesta al uso de WIX:

WIX podría ser genial y todo, pero ¿cómo funciona debajo del capó? ¿Qué detalles hacen que WIX instale el ensamblaje de la manera correcta para instalarlo? ¿Cómo lo busca? ¿Es una llamada al sistema / .NET? ¿Hay alguna llamada en un dll enterrado en alguna parte de System32 que deba hacerse?

(Editar: parece que WIX usa MSI bajo el capó. Vea mis comentarios en la respuesta aceptada).

Edición final: parece que la forma correcta de instalar un ensamblaje en el GAC es usar el instalador de Windows, y nada más. Voy a darle una oportunidad a Wix. ¡Gracias a todos!

Con Wix, haría algo como esto:


      

Cuando utiliza el atributo Assembly = “. Net” para un archivo en WiX, creará entradas en la tabla MsiAssembly y MsiAssemblyName para este componente y lo marcará como un componente GAC.

http://blogs.msdn.com/astebner/archive/2006/11/04/why-to-not-use-gacutil-exe-in-an-application-setup.aspx

Parece que el gacutil debería evitarse; no es una aplicación redistribuible En cambio, la forma “correcta” de instalarlos parece ser el uso de MSI, una de las formas es WIX, tal como lo publica CheGueVerra u otro script.

Use el método GacInstall System.EnterpriseServices.Internal.Publish .

Ventajas: Parece ser una herramienta interna. Probablemente hace todo lo correcto.

Desventajas: como parte de un instalador, aún tendría que crear y ejecutar una aplicación que llame a esto (a menos que el instalador que realice sea una aplicación personalizada que lo haga de todos modos).

¿Su instalador no tiene una manera de instalar un ensamblaje en el GAC? Por tu cuenta, yo diría GACUTIL:

http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx

Si no quiere manejar las cosas de Gacutil usted mismo, siempre puede crear un proyecto de instalación en Visual Studio.

Pero me quedaría con Gacutil yo mismo.

usa gacutil

Ventajas: parece que siempre funciona. Desventajas:

  • debe empacar un ejecutable adicional con su instalador.
  • Como una utilidad de desarrollo, parece tener efectos secundarios adicionales (como forzar la instalación pase lo que pase).
  • NO debe incluirse en ninguna redistribución dada a los clientes.

La mejor manera es usar gacutil -i Library.dll .

El único problema con gacutil es que no está en la RUTA predeterminada del sistema. Sin embargo, está en una ubicación fija en relación con el directorio de Windows, para una versión dada de .Net Framework. Entonces puede usar la siguiente línea de comando para ejecutarlo desde cualquier lugar:

 %SystemRoot%\Microsoft.Net\Framework\v1.1.4322\gacutil -i 

PD: simplemente copiar su ensamblaje en c: \ windows \ assembly no funcionará. Explorer solo muestra una vista simplificada de la carpeta, que de hecho contiene muchas carpetas diferentes para diferentes tipos de ensamblajes. Hacer una copia desde un instalador no desencadenará todas las operaciones realizadas por el explorador en un arrastrar y soltar. (escrito aquí porque todavía no tengo suficiente reputación para comentar en otras publicaciones).

copiar directamente a% WINDIR% \ Assembly.

Ventaja: directo.

Desventaja: AFAIK,% WINDIR% \. La Asamblea simplemente está donde está ahora, y su ubicación está sujeta a cambios. Esto haría que se rompa en futuras versiones de Windows o si el comportamiento de esa carpeta cambia. Esta probablemente no es la forma correcta.

Desventaja extrema: como dijo locamente:

simplemente copiar su ensamblaje en c: \ windows \ assembly no funcionará. Explorer solo muestra una vista simplificada de la carpeta, que de hecho contiene muchas carpetas diferentes para diferentes tipos de ensamblajes. Hacer una copia desde un instalador no desencadenará todas las operaciones realizadas por el explorador en un arrastrar y soltar. (escrito aquí porque todavía no tengo suficiente reputación para comentar en otras publicaciones).