Как запускать события пост-сборки Visual Studio только для отладочной сборки - PullRequest
554 голосов
/ 29 сентября 2008

Как я могу ограничить запуск событий после сборки только для одного типа сборки? Я использую события для копирования библиотек DLL в локальный виртуальный каталог IIS, но не хочу, чтобы это происходило на сервере сборки в режиме выпуска.

Ответы [ 9 ]

694 голосов
/ 29 сентября 2008

События до и после сборки запускаются как пакетный скрипт. Вы можете сделать условный оператор на $(ConfigurationName).

Например,

if $(ConfigurationName) == Debug xcopy something somewhere
493 голосов
/ 23 августа 2010

К вашему сведению, вам не нужно использовать goto. команду оболочки 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".
)
121 голосов
/ 29 сентября 2008

Добавьте ваше событие пост сборки как обычно. Затем сохраните свой проект, откройте его в Блокноте (или в вашем любимом редакторе) и добавьте условие в группу свойств PostBuildEvent. Вот пример:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
103 голосов
/ 24 июля 2009

альтернативно (поскольку события помещаются в пакетный файл и затем вызываются), используйте следующее. (в окне событий Build, а не в пакетном файле):

if $(ConfigurationName) == Debug goto :debug

:release
signtool.exe ....
xcopy ...

goto :exit

:debug
' debug items in here

:exit

Таким образом, вы можете иметь события для любой конфигурации и по-прежнему управлять ими с помощью макросов, а не передавать их в пакетный файл и помнить, что% 1 - это $ (OutputPath) и т. Д.

12 голосов
/ 22 февраля 2016

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.

4 голосов
/ 29 сентября 2008

Вы можете передать имя конфигурации сценарию после сборки и проверить его там, чтобы увидеть, должно ли оно работать.

Передайте имя конфигурации с помощью $ (ConfigurationName)

Проверка основана на том, как вы реализуете шаг после сборки - это будет аргумент командной строки

0 голосов
/ 29 июня 2017

Это работает для меня в Visual Studio 2015.
Я копирую все dll-файлы из папки, расположенной в папке lib на том же уровне, что и папка моего решения, в целевой каталог создаваемого проекта.
Используя относительный путь из моего каталога проекта и поднимаясь по структуре папок в два шага с помощью .. \ .. \ lib

MySolutionFolder
.... MyProject
Lib

if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE  (echo "Not Debug mode, no file copy from lib")
0 голосов
/ 14 декабря 2012

В VS 2012 вы должны использовать (я думаю, в VS 2010 тоже)

if $(Configuration) == Debug xcopy

$ (ConfigurationName) был указан как макрос, но не был назначен.

enter image description here

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

0 голосов
/ 29 сентября 2008

Как и для любого проекта, настройки можно настроить для каждой конфигурации, просто выберите конфигурацию, которую вы хотите изменить, в раскрывающемся списке диалоговых окон страниц свойств и отредактируйте шаг после сборки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...