2008-10-15 14 views
13

Parece que hay muchas formas diferentes de registrar ensamblajes con el GAC, como en, 'funcionan'. Sin embargo, ¿cuál es la forma "correcta" de hacerlo?¿Cuál es la forma "correcta" de registrar/instalar una Asamblea en el GAC?

En respuesta a Lou Franco (y gacutil):

estoy usando Gacutil para el desarrollo, pero me parece que no es la forma correcta de instalar, ya que gacutil no está incluido en el básico Utilidades .NET anteriores a .NET 1.1: solo es una herramienta de desarrollador.

Adicional: Gacutil (como se ve en las respuestas a continuación) no es redistribuible y, por lo tanto, no debe utilizarse en ninguna aplicación que pretenda ofrecer a personas que no sean desarrolladores. AKA, clientes. Ver This blog post (and comments) by Aaron Stebner.

En respuesta a la utilización de WIX:

WIX pudo ser grande y todo, pero ¿cómo funciona bajo el 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?

(Edit: parece que WIX utiliza MSI bajo el capó Ver mis comentarios en la respuesta aceptada..)

edición final: Parece que la forma correcta de instalar un ensamblado en la GAC ​​está utilizando Windows instalador , y nada más. Voy a darle una oportunidad a Wix. ¡Gracias a todos!

Respuesta

17

Con Wix me gustaría hacer algo como esto:

 

<DirectoryRef Id="MyDirectory" > 
    <Component Id="MyComponent" Guid="PUT-GUID-HERE" DiskId="1"> 
     <File Id="MyAssembly" Name="MyAssembly.dll" Assembly=".net" KeyPath="yes" Source="MyAssembly.dll" /> 
    </Component> 
</DirectoryRef> 

Cuando se utiliza el atributo Asamblea = para un archivo en WiX, se creará entradas en la tabla MsiAssembly y MsiAssemblyName para este componente "red". y marcarlo como un componente de GAC.

+0

MSI (que usa wix) parece ser la solución. AFAIK (con la investigación y las ideas dadas en esta pregunta) no hay otra forma adecuada de instalar un ensamblaje en el GAC actualmente disponible en Windows. –

+0

Aquí hay un enlace a un tutorial de WIX http://www.tramontana.co.hu/wix/ – CheGueVerra

+0

Tenga en cuenta que, en los principales escenarios de actualización, el ensamblaje desaparecerá del GAC en algunos casos: http://support.microsoft.com/ kb/905238 – koltun

0

use gacutil.

Ventajas: parece que siempre funciona. Desventajas:

  • debe empaquetar 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.
0

¿Su instalador no tiene una forma de instalar un ensamblaje en el GAC? Por su cuenta, diría gacutil:

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

+0

Sí, puede crear un instalador que coloque archivos DLL en el GAC – Will

+0

Los instaladores agregarán el archivo directamente a las tablas msiAssembly y msiAssemblyName con los valores apropiados O usarán un método de diferenciación de instantáneas para determinar la ubicación exacta de los archivos y la entradas de registro. –

-5

copia directamente a% windir% \ Assembly.

Ventaja: Directo.

Desventaja: AFAIK,% WINDIR% \ Assembly just sucede para estar 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.

extrema desventaja: Según lo dicho por madmath:

sólo copiar su conjunto en c: \ windows \ assembly no funcionarán. 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).
+0

Estoy de acuerdo, no quiero rechazar, pero no deberías hacer esto. –

+0

De acuerdo. Tirarlo hacia afuera para asegurarse de que esté cubierto, y la gente sabe que es malo. :) –

0

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 el gacutil.

2

Utilice System.EnterpriseServices.Internal.Publish método GacInstall.

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

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

-1

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. Así que usted puede utilizar la siguiente línea de comandos para ejecutar desde cualquier directorio:

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

PS: sólo copiar su conjunto 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).

Cuestiones relacionadas