Как запускать события пост-сборки Visual Studio только для сборки отладки

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

Ответ 1

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

Например

if $(ConfigurationName) == Debug xcopy something somewhere

Ответ 2

FYI, вам не нужно использовать 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".
)

Ответ 3

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

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>

Ответ 4

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

if $(ConfigurationName) == Debug goto :debug

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

goto :exit

:debug
' debug items in here

:exit

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

Ответ 5

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.

Ответ 6

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

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

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

Ответ 8

Это работает для меня в 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")

Ответ 9

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