Рекомендации ILMerge

Введение

В этом сообщении показано, как dotnet заменить все .exe + .dll files одним combined .exe. Он c-sharp также сохраняет нетронутым c#.net файл отладки .pdb.

Для консольных приложений

Вот базовый dot-net Post Build String для Visual Studio 2010 SP1 dotnet с использованием .NET 4.0. Я ilmerge создаю консоль .exe со всеми csharp вложенными в нее файлами dotnet .dll.

"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards

Основные советы

  • На выходе получается файл «AssemblyName.all.exe», который объединяет все вложенные DLL в один .exe.
  • Обратите внимание на каталог ILMerge\. Вам нужно либо скопировать утилиту ILMerge в каталог решения (чтобы вы могли распространять исходный код, не беспокоясь о документировании установки ILMerge), либо изменить этот путь, чтобы он указывал на то, где находится ILMerge.exe.

Дополнительные подсказки

Если у вас есть проблемы dotnet с тем, что он не работает, включите .net-framework Output и выберите Show output from: Build. Проверьте точную deployment команду, созданную Visual ilmerge Studio, и проверьте наличие dot-net ошибок.

Образец скрипта сборки

Этот сценарий заменяет deploy все .exe + .dll files одним combined .exe. Он также сохраняет visual-c# отладочный файл .pdb в неизменном deploy виде.

Чтобы использовать, вставьте c#-language это в свой шаг Post Build на вкладке deploy Build Events в проекте C# и убедитесь, что .net-framework вы изменили путь в первой dot-net строке так, чтобы он указывал deploy на ILMerge.exe:

rem Create a single .exe that combines the root .exe and all subassemblies.
"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards
rem Remove all subassemblies.
del *.dll
rem Remove all .pdb files (except the new, combined pdb we just created).
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).all.pdb.temp"
del *.pdb
ren "$(TargetDir)$(TargetName).all.pdb.temp" "$(TargetName).all.pdb"
rem Delete the original, non-combined .exe.
del "$(TargetDir)$(TargetName).exe"
rem Rename the combined .exe and .pdb to the original project name we started with.
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).pdb"
ren "$(TargetDir)$(TargetName).all.exe" "$(TargetName).exe"
exit 0

c#

.net

deployment

ilmerge

2022-07-22T02:58:29+00:00