2010-03-26 16 views
8

Tengo que registrar varios ensambles en GAC usando InstallSheild y también necesito que los ensamblajes se copien también en INSTALLDIR. ¿Cuál es la mejor manera de hacerlo? También necesito llamar a regasm.exe para un ensamblado; ¿Puedo hacer esto usando InstallShield?Registrar ensamblajes en GAC usando InstallShield

Realmente necesito un nuevo 'componente' para cada ensamblaje que deba registrarse en GAC?

Respuesta

10

Esta respuesta asume que está utilizando un tipo de proyecto de Windows Installer.

1) Cree un componente para cada archivo DLL, configúrelo como el archivo de clave y configure la carpeta de destino como GlobalAssemblyCache. Esto instruye a Windows Installer para usar la acción estándar MsiPublishAssemblies que a su vez realiza llamadas a Fusion para registrar el ensamblado en el GAC. Esto es efectivamente lo que GACUTIL hace por usted. Recuerde: GACUTIL no es redistribuible. Si el conjunto tiene archivos complementarios, agréguelos como archivos complementarios al mismo componente.

2) Si su ensamblaje es ComVisible, cree un componente para cada DLL, márquelo como archivo de claves y establezca .NET ComInterop en verdadero. Esto hará que la información COM se extraiga en el momento de la compilación y le indicará a Windows Installer que use la acción estándar MsiPublishAssemblies para escribir la información en el registro. Nota: Si tiene un código de usuario personalizado en la sección de registro del ensamblado, esto no será capturado. Esto es por MSDN que regasm /regfile no ejecuta esta ruta de código. Deberá ingresar manualmente esta información en la vista de registro de InstallShield para ese componente.

3) Sí, puede implementar un ensamblado de nombre seguro tanto de forma global como privada. Si el privado se verá o no depende de si el conjunto con la referencia tiene el conjunto de uso específico o no.

+0

Bueno para trotar mi memoria Chris! –

0

Sí. En lo que respecta al sistema, esos son dos archivos diferentes. AFAIK, no puede tener un archivo en el GAC y tenerlo en una carpeta aleatoria en la computadora de destino al mismo tiempo.

Teóricamente, si está en el GAC, no lo necesita en el directorio del producto. Si está en el GAC, esa será la versión cargada, no la que está en el directorio del producto. Sin embargo, se vuelve más difícil si necesita, digamos, registrarlo también para interoperabilidad COM. Puedo estar equivocado, pero cuando lo intenté, tuve que tener ambos: uno en el directorio, uno en el GAC.

Pero realmente, probablemente no lo necesite en el GAC si lo necesita en el directorio del producto. Si se carga desde cualquier programa en cualquier lugar, siempre, entonces el GAC es un lugar decente para ello. Si lo coloca en la interoperabilidad de GAC For COM, eso es innecesario; registrarlo apuntando a la carpeta que ha instalado funcionará bien si tiene instalado Installshield correctamente.

+0

Desarrollé una barra de herramientas de Windows en C#. En este caso, los dlls deberían estar en GAC, ¿verdad? – Cornel

+0

No necesariamente. Si los consumidores de su barra de herramientas lo usan en su aplicación, solo lo necesitan en la carpeta de su aplicación. –

Cuestiones relacionadas