Почему ILMerge ничего не делает при публикации?

ILMerge обычно отлично объединяет мои сборки при создании выпуска, но при публикации для ClickOnce полученный EXE-файл не содержит библиотеки DLL, которые должны были быть объединены.

Я думаю, что ILMerge работает, но Publish перезаписывает новую объединенную сборку старой оригинальной. Я создал событие Post-Build, которое остановило сборку сразу после запуска ilmerge, и оно было объединено, как и ожидалось.

Почему это происходит, и есть ли обходной путь?


person drifter    schedule 13.08.2010    source источник


Ответы (2)


ClickOnce выполняет сборку перед публикацией. Если вы хотите что-то изменить в своем развертывании, вам придется собрать файлы вручную и отредактировать манифест развертывания (файл .application) и манифест приложения (файл yourapp.exe.manifest) с помощью MageUI и повторно подписать файлы.

person RobinDotNet    schedule 13.08.2010
comment
Если кому-то нужно пойти по этому пути, мой вопрос и ответ здесь подробно объясняют процесс stackoverflow.com/questions/25004056/ - person The Muffin Man; 26.03.2015

Судя по всему, после сборки проекта и запуска сценария пост-сборки Publish повторно копирует выходные файлы из каталога obj в каталог bin (вероятно, потому, что он изменил файл манифеста). По крайней мере, в Visual Studio 2010.

Я исправил это, добавив это в свой сценарий после сборки после строки ilmerge:

ECHO Копирование сборки из bin обратно в каталог obj: COPY "$(TargetFileName)" "....\obj\$(ConfigurationName)" COPY "$(TargetFileName)" "....\obj\$(ConfigurationName)"

Он копирует файл обратно в каталог obj, чтобы Publish мог работать с нужными файлами.

person drifter    schedule 13.08.2010