VS .NET: Post Build Events для «Первичного вывода » в Project Installer
-
22-08-2019 - |
Вопрос
Я использую следующие действия после сборки в проекте, чтобы объединить либерацию в своем приложении:
IF $(ConfigurationName) == Debug GOTO end
cp $(TargetPath) $(TargetDir)app_unmerged.exe
del $(TargetPath)
"C:\Program Files\Microsoft\ILMerge\ilmerge.exe" /internalize $(TargetDir)MyApp_unmerged.exe $(TargetDir)someLib.dll /out:$(TargetDir)myApp.exe
del $(TargetDir)myApp_unmerged.exe $(TargetDir)someLib.dll
:end
Это работает нормально. Теперь у меня есть проект установщика, и я добавлю вывод проекта. Я ожидаю, что используется «первичный выход из», то есть EXE в /бин /релиз. Но на самом деле вместо /бин/release/myapp.exe, /obj/release/myapp.exe используется.
Кто -нибудь знает, смогу ли я изменить это поведение и использовать выходные данные в /bin /релиз для проекта установщика? Спасибо.
Решение 3
Кажется, нет реального решения для этой проблемы, но существует обходной путь. Я создал билет на Microsoft Connect: https://connect.microsoft.com/visualstudio/feedback/viewfeedback.aspx?feedbackid=428898
Microsofts anwser:
Привет,
Чтобы выполнить эти действия после сборки сборки, вам нужно будет поместить их в пакетный файл, а затем добавить команду Appropiate, чтобы вызвать пакетный файл в диалоговом окне события Post Build. Я вижу, что в скрипте есть несколько случаев со ссылками на ряд переменных Visual Studio. Поскольку мы не выставляем эти переменные в качестве переменных среды, вам придется передать их в качестве параметров в пакетный файл.
Надеюсь, это поможет!
Менеджер программы Candy Chiang - Visual Studio
Другие советы
Я решаю проблему применить Ilmerge в папке /OBJ, это моя конфигурация события после сборки:
Скопируйте $ (ProjectDir) obj $ (PlatformName) $ (configurationName) $ (TargetFilename) $ (TargetDir) Temp.exe $ (SolutionDir) lib ilmerge /wildcards /t: exe /out: "$ (projectDir) obj $ (platformname) $ (configurationname) $ (targetFilEname) "" $ (targetDir) temp.exe "" $ (targetDir) log4net.dll "" $ (targetDir) other.dll "del $ (targetDir) Temp" .исполняемый файл
Я разместил файлы явно, что означает, что вместо того, чтобы сообщать проекту настроек использовать контент праймеры, он явно помещает файл .exe/.dll.
Это работает довольно хорошо, я получаю контроль, какой файл будет введен и относительные пути пользователя проекта настройки, чтобы проект настроек можно было использовать на других машинах.