SommarioCome si esegue il debug in un assembly ILMerged?
voglio alterare il processo di creazione di una soluzione 2-assemblaggio, in modo tale che una chiamata a ILMerge viene richiamato, ed i risultati costruire in un unico assembly. Inoltre vorrei poter eseguire il debug nell'assemblaggio risultante.
Preparazione - Un semplice esempio
- New Solution - ClassLibrary1
- Crea una funzione statica 'GetMessage' in Class1 che restituisce la stringa "Ciao mondo"
- Crea nuova console app che i riferimenti la ClassLibrary.
- Uscita GetMessage da main() tramite la console.
Ora si dispone di un'app 2 di montaggio che emette "Hello World" sulla console.
Quindi cosa succederà ..?
vorrei alterare il processo di applicazione di generazione della console, di includere una fase di post costruzione che utilizza ILMerge, per unire il gruppo ClassLibrary nel gruppo consolle
Dopo questo passo che dovrebbe essere in grado di:
- eseguire l'applicazione Console direttamente senza ClassLibrary1.dll presente
- eseguire l'applicazione console tramite F5 (o F11) in VS ed essere in grado di eseguire il debug in ciascuno dei 2 progetti.
limitato successo
ho letto this blogpost ed è riuscito a raggiungere l'unione che cercavo con un comando post-generazione di ...
"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)
... ed un ILMerge. bat file che leggono ...
CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*
Questo funziona abbastanza bene, e in effetti pro duce un exe che funziona al di fuori dell'ambiente VS come richiesto. Tuttavia non sembra che produca simboli (file .pdb) che VS è in grado di utilizzare per eseguire il debug nel codice.
Penso che questo sia l'ultimo pezzo del puzzle.
Qualcuno sa come posso farlo funzionare?
FWIW Sto eseguendo VS2010 su una macchina x64 Win7 x64.
Aggiornamento: Perché voglio farlo?
E 'stato chiesto:' Ho davvero bisogno di eseguire ILMerge durante lo scenario di debug?'
Le assemblee della mia soluzione dovranno coesistere nella stessa cartella di quelli di altre soluzioni (alcune delle quali mi sarà probabilmente sviluppare)
Alcune di queste soluzioni si divideranno le dipendenze su diverse versioni di alcune assemblee.
Quindi Soluzione1 potrebbe essere costituito da Console1 e ClassLibrary1.dll (v1) e Solution2 potrebbe essere costituito da Console2 e Classlibrary1.dll (v2).
Anziché registrare tutto nel GAC, ho pensato di poter visualizzare la versione corretta di una dipendenza nell'assembly principale della soluzione per evitare una collisione.
Tuttavia ciò attualmente rende impossibile il debug della soluzione, che è necessario eseguire in combinazione con le altre soluzioni che saranno presenti.
Questo sembra complicato? Questo perché è ..: D
Invece di avere uno script .bat, una cosa che si potrebbe fare è creare un terzo progetto (tipo ClassLibrary funzionerà) le cui dipendenze sono ConsoleApp e ClassLibrary; chiamalo PostSolutionBuildEvents.Quindi il suo post-build deve essere un comando ILMerge. In questo modo, avrai accesso a tutte le macro come '$ (SolutionDir)'. –
Nota: non dovresti avere bisogno di cose GAC per questo scopo, ci sono una quantità enorme di opzioni che vanno da "funziona" quando nulla è GACd ai file di configurazione dell'applicazione –
hai mai risolto questo? lo stesso problema qui ... –