2010-05-06 11 views
5

Tengo una solución en Visual Studio con 5 proyectos. Ellos son:Hacer referencia a conjuntos creados con ILMerge en proyectos de Visual Studio

  • Foo.Core: Funcionalidad principal
  • : El código generado construido encima de núcleo
  • Foo.Web: extensiones Web específicos
  • Foo.Web.Mvc: MVC-específica extensiones
  • Newtonsoft.Json: Biblioteca tercera parte

quiero usar ILMerge fusionar Foo.Core, y Newtonsoft.Json en un solo conjunto, llamado Foo. Esa es la parte fácil.

El problema que me estoy encontrando es que Foo.Web y Foo.Web.Mvc ambos necesitan hacer referencia a los tres conjuntos fusionados.

Si hago referencia a los ensamblajes originales, tendrán referencias no válidas después de hacer ILMerge.

Si hago referencia al ensamblado ILMerged, debo hacer referencia a un ensamblaje de depuración y luego cambiarlo antes de empaquetar todo, lo que no parece ideal.

He intentado crear un proyecto llamado Foo, que hace referencia a los 3 conjuntos fusionados y reemplaza su propia salida con el ensamblado ILmerged, pero parece que no funciona en absoluto.

¿Hay alguna manera confiable de hacerlo?

Respuesta

2

ILMerge está diseñado para crear un nuevo paquete/componente como un 'producto' en caja (API, Programa ...) para simplificar la administración de ensamblaje como implementación, referencia de gac, visibilidad de ensamblaje y más para uso todo en uno o uso externo, no mezclado.

Mi conjetura es que hay que configurar un PostBuildEvent en su conjunto principal/proyecto (?) Si usted tiene uno o una PreBuildEvent en sus Foo.Web y Foo.Web.Mvc proyectos para generar su fusionado Foo que se hace referencia en su Foo.Web y Foo.Web.Mvc proyectos como un ensamble externo.

Puede hacer esto más integrado en Visual Studio configurando una tarea MsBuild. A sample (desde Stackoverflow).

+0

Sí, he intentado hacer eso, pero no pude obtener el efecto que estaba buscando. Parece que ILMerge va a necesitar ser reservado para un paso final antes de una publicación en lugar de una cosa de tiempo de compilación. –

+0

Creo que puede lograr esto si sus proyectos se construyen en el orden correcto. ¿Ha configurado las dependencias de su proyecto para garantizar el orden de compilación? – JoeBilly

3

Sé que llego muy tarde al juego, pero estábamos luchando con este mismo problema y así es como lo resolvimos.

En primer lugar, editamos los archivos csproj de todos los proyectos no fusionados o satélite para usar un conditional reference en un ensamblaje externo en función de la existencia de un archivo. En este caso, vamos a probar la existencia del ensamblado fusionado.Luego ejecutamos un script de compilación que hace lo siguiente:

  1. Crea la solución.
  2. Ejecuta ILMerge en sus ensamblados primarios con el resultado que es el archivo en la referencia condicional.
  3. Reconstruya la solución, pero esta vez porque existe el ensamblado fusionado, los ensamblajes no fusionados o satélite ahora tendrán la referencia correcta.
+0

Aquí hay un ejemplo del concepto anterior. asegúrese de mirar las etiquetas ProjectReference y Reference: https://github.com/joliver/EventStore/blob/5fce28b92fa875ea8acdfea387161abdee3c8b00/src/proj/EventStore.Persistence.RavenPersistence/EventStore.Persistence.RavenPersistence.csproj –

Cuestiones relacionadas