5

Yo soy la creación de un proyecto de instalación de una solución de C# y me encuentro con un problema de dependencia:VS 2010 proyecto de instalación no lleva ensamblados de referencia comunes a todas las salidas

En mi solución, tengo 4 salidas independientes de proyectos - uno ventanas servicio y tres ejecutables, que comparten entre ellos algunas referencias.

Necesito que el instalador instale las cuatro para que la solución funcione.

He configurado una carpeta de instalación para cada salida de proyecto en "Carpeta de aplicación" en el cuadro de diálogo "Sistema de archivos en máquina de destino", agregué el resultado del proyecto del servicio de Windows en su carpeta. Pero cuando continúo intentando agregar las salidas del proyecto de los ejecutables en sus carpetas, los ensamblados que ya llevan a la carpeta del servicio de Windows no se llevan a la carpeta ejecutable, y después de la instalación los ejecutables no se ejecutarán ya que faltan dependencias.

Puedo agregar manualmente los ensamblados que faltan a las carpetas de los ejecutables, pero parece que no se debe hacer así y me falta algo.

¿Alguna idea?

Respuesta

1

Bien debería crear un nuevo proyecto en la solución, y configurar el "instalador" para que sea el resultado de su aplicación principal (o aplicaciones principales) debería resolver las dependencias en sí.

+0

Lo siento, pero no entendí nada de lo anterior. ¿Qué proyecto nuevo debería crear en la solución y con qué propósito? ¿Qué quiere decir con configurar el instalador para que sea el resultado de la (s) aplicación (es) principal (es)? Por favor, trata de elaborar. Gracias. – Eliaz

+0

Sí, la configuración debe tener la salida establecida para la aplicación que desee implementar. Las referencias deben resolverse por sí mismas, y en las propiedades, debe poder definir de qué manera se implementan los ensamblados. Pero realmente no estoy seguro si estamos hablando de lo mismo. – squelos

1

Estaba teniendo lo que creo que es el problema que se describió originalmente. Tengo una aplicación Winform y una aplicación de consola como dos proyectos separados, pero un solo proyecto de instalación maneja ambos.

Tanto la aplicación Winform como la aplicación de consola utilizan los mismos dos ensamblajes externos: uno que no forma parte de la solución (referencia a un archivo en una carpeta) y otro de un proyecto de clase C# (referencia al proyecto).

Lo que he encontrado es que el instalador supone que la salida del proyecto está combinada en una sola carpeta en la máquina de instalación. Por lo tanto, todos los ensamblados comunes también compartirán con los ejecutables que los necesitan. Por lo tanto, si agrega la salida del proyecto desde el primer archivo ejecutable a la carpeta, es por eso que ve que aparecen todas sus dependencias y luego, cuando se agrega el segundo resultado del proyecto, solo aparecerán los ensamblados que aún no se hayan agregado.

No importa si crea subcarpetas en la carpeta de la aplicación, Visual Studio parece tratar la Carpeta de la aplicación como una unidad completa ... en lo que se refiere a la Salida del proyecto (exe, dll y res).

Hay dos formas de solucionar esto. El primero es crear un proyecto de instalación separado para cada ejecutable. En un proyecto grande, esto podría ser una gran cantidad de proyectos de configuración.

Si quiere mantener todo en una sola instalación, una mejor opción es utilizar el GAC para los ensamblados compartidos, que se describe en otro artículo de desbordamiento de pila aquí: Use Visual Studio Setup Project to automatically register and GAC a COM Interop DLL

MSI puede hacer el trabajo hecho. Haga clic derecho en "Sistema de archivos en la máquina de destino", Agregar, GAC. Haga clic con el botón derecho en esa carpeta agregada, Agregar, Salida del proyecto. Eso asegura que el ensamblaje se gac-ed.

El GAC es la mejor solución en mi mente, ya que sus ensamblajes son administrados por la capa .NET si luego los realiza cambios y mejoras. Uno de los beneficios de.NET es eliminar los viejos problemas de "DLL hell" que estaban en Win 98 y versiones anteriores de Windows. Recomiendo usarlo para su código común.

Cuestiones relacionadas