Сводка
Я хочу изменить процесс сборки решения из 2 сборок, чтобы вызывался вызов ILMerge, и сборка приводила к одной сборке.Далее я хотел бы иметь возможность отладки в результирующей сборке.
Подготовка - простой пример
- Новое решение - ClassLibrary1
- Создать статическую функцию 'GetMessage' в Class1, которая возвращает строку "Hello world "
- Создайте новое консольное приложение, которое ссылается на ClassLibrary.
- Выведите GetMessage из main () через консоль.
Теперь у вас есть приложение на 2 сборкикоторый выводит «Hello World» на консоль.
Так что дальше ..?
Я хотел бы изменить процесс сборки приложения консоли, чтобы включить посткомпиляциюшаг, который использует ILMerge, чтобы объединить сборку ClassLibrary в сборку консоли
После этого шага я должен быть в состоянии:
- Запустить консольное приложение напрямую без ClassLibrary1.dll присутствует
- Запустите консольное приложение через F5 (или F11) в VS и получите возможность отладки в каждом из 2 проектов.
Ограниченный успех
Я прочитал этот блог и сумел добиться слиянияПосле этого я выполнил команду после сборки ...
"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)
... и файл ILMerge.bat, который читал ...
CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*
Это работает довольно хорошо,и фактически производит exe-файл, который работает вне среды VS, как требуется.Однако, похоже, что он не производит символы (файл .pdb), которые VS может использовать для отладки в коде.
Я думаю, что это последняя часть головоломки.
Кто-нибудь знает, как я могу сделать эту работу?
FWIW Я работаю VS2010 на 64-разрядной машине Win7 x64.
Обновление: Почему я хочу это сделать?
Был задан вопрос: «Действительно ли мне нужен ILMerge во время сценария отладки?»
Сборки моего решения должны сосуществовать в той же папке, что и сборки других решений (некоторые изкоторый я, скорее всего, разработаю)
Некоторые из этих решений будут иметь общие зависимости от разных версий некоторых сборок.
Таким образом, Solution1 может состоять из Console1 и ClassLibrary1.dll (v1), а Solution2 может состоять из Console2 и Classlibrary1.dll (v2).
Вместо того, чтобы регистрировать все в GAC, я подумал, что смогу ILMerge ввести правильную версию зависимости в основную сборку решения, чтобы избежать коллизии.
Однако в настоящее время это делает невозможнымотладить решение, которое мне нужно сделать в сочетании с другими решениями, которые будут присутствовать.
Это звучит сложно?Это потому что это ..: D