Как запустить события после сборки Visual Studio только для сборки отладки
Как я могу ограничить мои события после сборки только для одного типа сборки? Я использую события для копирования DLL в локальный виртуальный каталог IIS, но я не хочу, чтобы это происходило на сервере сборки в режиме выпуска.
9 ответов
события до и после сборки выполняются как пакетный скрипт. Вы можете сделать условный оператор на $(ConfigurationName)
.
например
if $(ConfigurationName) == Debug xcopy something somewhere
FYI, вам не нужно использовать 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".
)
добавьте событие post build как обычно. Затем сохраните проект, откройте его в блокноте (или любимом редакторе) и добавьте условие в группу свойств PostBuildEvent. Вот пример:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
альтернативно (так как события помещаются в пакетный файл и затем вызываются), используйте следующее. (в поле события сборки, а не в пакетном файле):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' debug items in here
:exit
таким образом, вы можете иметь события для любой конфигурации и управлять ими с помощью макросов, а не передавать их в пакетный файл и помнить, что %1 - $(OutputPath) и т. д.:
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.
вы можете передать имя конфигурации скрипту после сборки и проверить его там, чтобы увидеть, должен ли он работать.
передайте имя конфигурации с помощью $(ConfigurationName)
проверка основана на том, как вы реализуете шаг после сборки-это будет аргумент командной строки
это работает для меня в Visual Studio 2015.
Я копирую все dll-файлы из папки, расположенной в папке lib на том же уровне, что и моя папка решения, в targetdirectory создаваемого проекта.
Используя относительный путь из моего каталога проекта и поднимаясь по структуре папок на два шага..\..\библиотека
MySolutionFolder
....Мой проект
Либ!--8-->
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Как и любой проект настройки buildevents может быть настроен на конфигурацию, просто выберите конфигурацию, которую вы хотите изменить в раскрывающемся списке диалогового окна страницы свойств и редактировать сообщение шаг сборки
в VS 2012 Вы должны использовать (я думаю, в VS 2010 тоже)
if $(Configuration) == Debug xcopy
$(ConfigurationName) был указан как макрос, но не был назначен.
сравнить:http://msdn.microsoft.com/en-us/library/c02as0cs (v=против 110).aspx