Я использую пакет NuGet MSBuild.ILMerge.Task
, чтобы объединить внешние DLL .NET с одним исполняемым файлом. Отлично работает.Как временно отключить MSBuild.ILMerge.Task?
Теперь, когда я пытаюсь изменить во время отладки, Visual Studio говорит:
Изменения не допускаются, если сборка не была загружена
Я предполагаю, что это оборотная сторона того, все зависимостей в один .exe (я не знаю об этом, это просто предположение).
Но в любом случае было бы целесообразно иметь MSBuild.ILMerge.Task
на сборке, но неактивно на отладке. Кто-нибудь знает, как добиться этого?
Обратите внимание, что когда MSBuild.ILMerge.Task
установлен через NuGet, когда вы нажмете «rebuild», он автоматически создаст единственный .exe (допустив, что файл .config за пределами, конечно, плюс .pdb). Вам ничего не нужно настраивать, и поэтому я не могу угадать внутреннюю работу процесса и его инактивацию.
Для получения дополнительной информации, я пишу сообщение в блоге о ILMerge. Я пытаюсь документировать все как-к, проблемы и подводные камни:
http://localcode.wikidot.com/merge-all-binary-files-dll-s-etc-into-a-single-exe
edit1: Я заметил, что пакет NuGet автоматически устанавливает .props
файл со следующей информацией:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Я начал искать DefaultTargets="Build"
и способ отключить при отладке, и я нашел this post, что, кажется, объясняет, как это сделать.
Edit2:
Если удалить эти строки из моего .csproj, то он пропускает компиляцию ILMerge правильно:
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props'))" />
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets'))" />
</Target>
<Import Project="..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets" Condition="Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" />
Это что-то, но это выглядит немного ручной работы и непрактично на данный момент ...
Невероятно полезно для пакетов Nuget! Вы можете использовать конфигурацию отладки для всех разработок и выпуска только при сборе пакетов nuget. У меня была неприятная ошибка сборки при запуске модульных тестов, и эта функция состояния сохранила мой день. –