Ответы:
События до и после сборки запускаются как пакетный скрипт. Вы можете сделать условное заявление о $(ConfigurationName)
.
Например
if $(ConfigurationName) == Debug xcopy something somewhere
К вашему сведению, вам не нужно использовать goto. Команду shell IF можно использовать с круглыми скобками:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
(обратите внимание на кавычки), если вы получите код ошибки 255
$(ConfigurationName)
пусто (командная строка события после сборки). if "$(Configuration)" == "Debug"
работал на меня. Кстати, если вы хотите сделать что-то во всех других конфигах, используйте if NOT "$(Configuration)" == "Debug"
.
Добавьте ваше событие пост сборки, как обычно. Затем сохраните ваш проект, откройте его в блокноте (или в вашем любимом редакторе) и добавьте условие в группу свойств PostBuildEvent. Вот пример:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
расширен до cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Макропеременные и все работает как обычно.
В качестве альтернативы (поскольку события помещаются в пакетный файл, а затем вызываются), используйте следующее (в окне событий Build, а не в пакетном файле):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Таким образом, вы можете иметь события для любой конфигурации и по-прежнему управлять ими с помощью макросов, а не передавать их в пакетный файл, помните, что %1
это так $(OutputPath)
и т. Д.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
и использоватьgoto :$(ConfigurationName)
Visual Studio 2015: правильный синтаксис (оставьте его в одной строке):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Нет ошибки 255 здесь.
Начиная с Visual Studio 2019, современный .csproj
формат поддерживает добавление условия непосредственно к Target
элементу:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Пользовательский интерфейс не предоставляет способ настроить это, но он, кажется, безопасно оставить Configuration
атрибут на месте, если вы вносите изменения через пользовательский интерфейс.
Это работает для меня в Visual Studio 2015.
Я копирую все файлы DLL из папки, расположенной в папке библиотеки на том же уровне, что и папка моего решения, в целевой каталог создаваемого проекта.
Используя относительный путь из моего каталога проекта и поднимаясь по структуре папок в два шага с помощью .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Как и любой параметр проекта, builddevents могут быть настроены для каждой конфигурации. Просто выберите конфигурацию, которую вы хотите изменить, в раскрывающемся окне диалога «Страницы свойств» и отредактируйте шаг после сборки.
В Visual Studio 2012 вы должны использовать (я думаю, в Visual Studio 2010 тоже)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
был указан как макрос, но не был назначен.
Сравните: макросы для команд и свойств сборки