Как запустить события после сборки 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) был указан как макрос, но не был назначен.

enter image description here

сравнить:http://msdn.microsoft.com/en-us/library/c02as0cs (v=против 110).aspx