Referencias de ensamblaje e ILmerge

Tengo una solución que consta de varios proyectos (todas las bibliotecas de clases). Digamos: A, B, C, D, E.

A, B y C proporcionan la funcionalidad principal y deben distribuirse juntos. D y E proporcionan algunos adaptadores que no necesariamente se necesitan en todas las situaciones.

Entonces, naturalmente, quiero ILmerge A, B y C en un conjunto (llamado ABC) antes de distribuir.

El problema es que cuando se compilan los proyectos, D y E tienen referencias a A, B y/o C, no a ABC. Entonces, cuando luego trato de hacer referencia a ABC, D y E en algún otro proyecto, obtengo errores de compilación que dicen algo como: "Argumento de instancia: no se puede convertir de 'A.IBoo' a 'A.IBoo'". En VS también puedo ver que las firmas de ensamblaje (nombres) son diferentes, por supuesto.

¿Existe una buena forma de solucionar este problema?

Sé que probablemente podría usar la política del editor, pero no es agradable.

Además, sé que puedo combinar proyectos en la solución original y evitar usar ILmerge, pero prefiero no hacerlo.

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

Me encontré con un problema similar. Resultó que tenía los tipos a los que se hacía referencia dos veces. Una vez en el montaje combinado y otra vez en los proyectos separados. Fue frustrante como el infierno.

Puede eliminar los proyectos y solo hacer referencia al ensamblaje combinado tratándolo más como una biblioteca o los proyectos se pueden combinar en una operación posterior a la compilación.

Otra posibilidad es crear un alias para el espacio de nombres global (http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx) y hacer referencia al ensamblado combinado. La desventaja es que siempre estarás un poco atrasado en los adaptadores.

Sin ver los proyectos reales, esto es lo que haría: separaría los proyectos ABC y los colocaría en su propia solución. Con un evento posterior a la compilación, ejecutaría ILMerge. Asegúrese de que esté versionado y tenga un nombre seguro. Te ahorrará dolores de cabeza en el camino.

Los proyectos D y E estarían en una solución junto con una referencia al conjunto combinado ABC.

Nuevamente, sin ver el código y las dependencias, es difícil saberlo. También depende de la frecuencia con la que se produzcan los cambios. Si estoy haciendo cambios en ABC para acomodar a DE, tener dos soluciones envejecería muy rápido.

contestado el 03 de mayo de 12 a las 18:05

Gracias por presentar varias opciones. Tengo referencias internas y externas como en su caso. En realidad, el proyecto del que estoy hablando es este: github.com/Kostassoid/Anodyne, build.cmd puede 'explicar' lo que estoy haciendo hasta ahora. Dividir una solución es probablemente la mejor idea, pero dado que es un proyecto joven, tengo que trabajar en cada parte con bastante frecuencia. - kostasoide

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.