Resumen¿Cómo depuro en un ensamblado ILMerged?
quiero alterar el proceso de construcción de una solución de 2-ensamblaje, de manera que una llamada a ILMerge se invoca, y los resultados se basan en un solo conjunto. Además, me gustaría poder depurar en el conjunto resultante.
Preparación - Un ejemplo sencillo
- nueva solución - ClassLibrary1
- Crear una función estática 'GetMessage' en la Clase 1 que devuelve la cadena "Hola mundo"
- Crear nueva aplicación de consola, que las referencias la ClassLibrary.
- Imprime GetMessage desde main() a través de la consola.
Ahora tiene una aplicación de montaje 2 que da salida a "Hello World" en la consola.
¿Qué sigue ...?
me gustaría alterar el proceso de aplicación de construcción de la consola, para incluir una etapa de post construcción que utiliza ILMerge, para combinar el conjunto de ClassLibrary en el montaje de la consola
Después de esta etapa I debe ser capaz de:
- ejecutar la aplicación de consola directamente sin ClassLibrary1.dll presente
- ejecutar la aplicación de consola a través de F5 (o F11) en VS y ser capaz de depurar en cada uno de los 2 proyectos.
Limited éxito
leí this blogpost y logró alcanzar la fusión que fue después con una orden posterior a la generación de ...
"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)
... y un ILMerge. archivo del murciélago que leyó ...
CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*
Esto funciona bastante bien, y de hecho pro duce un exe que se ejecuta fuera del entorno VS según sea necesario. Sin embargo, no parece producir símbolos (archivo .pdb) que VS pueda usar para depurar en el código.
Creo que esta es la última pieza del rompecabezas.
¿Alguien sabe cómo puedo hacer que esto funcione?
FWIW Estoy ejecutando VS2010 en una x64 Win7 x64 máquina.
Actualización: ¿Por qué quiero hacer esto?
Se ha preguntado: '¿Realmente necesito ILMerge durante el escenario de depuración?'
Las asambleas de mi solución tendrá que coexistir en la misma carpeta que los de otras soluciones (algunas de las cuales es probable que desarrollar)
Algunas de estas soluciones compartirán dependencias en diferentes versiones de algunos montajes.
Así Solution1 podría estar compuesto por Console1 y ClassLibrary1.dll (v1) y Solution2 podría estar compuesto por Console2 y Classlibrary1.dll (v2).
En lugar de registrar todo en el GAC, pensé que podría ILMerge la versión correcta de una dependencia en el ensamblaje principal de la solución para evitar una colisión.
Sin embargo, esto hace que actualmente sea imposible depurar la solución, lo que tengo que hacer en conjunto con las otras soluciones que estarán presentes.
¿Suena complicado? Eso es porque es ..: D
En lugar de tener un script .bat, una cosa que podría hacer es crear un tercer proyecto (tipo ClassLibrary funcionará) cuyas dependencias son ConsoleApp y ClassLibrary; llámalo PostSolutionBuildEvents.Luego haga que su postcompilación sea un comando ILMerge. De esta forma, obtienes acceso a todas las macros como '$ (SolutionDir)'. –
Nota: No debe necesitar las funciones de GAC para este fin, hay una gran cantidad de opciones que van desde "simplemente funciona" cuando nada es GACd hasta los archivos de configuración de la aplicación –
¿alguna vez resolvió esto? el mismo problema aquí ... –