Как я могу ограничить мои события после сборки запуском только для одного типа сборки? Я использую события для копирования DLL файлов в локальный виртуальный каталог IIS, но я не хочу, чтобы это происходило на сервере сборки в режиме выпуска.
Как запускать события пост-сборки Visual Studio только для сборки отладки
Ответ 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)
Проверка его основана на том, как вы выполняете шаг после сборки - это будет аргумент командной строки
Ответ 7
В VS 2012 вы должны использовать (я думаю, в VS 2010 тоже)
if $(Configuration) == Debug xcopy
$(ConfigurationName) было указано как макрос, но не было назначено.
Сравнить: http://msdn.microsoft.com/en-us/library/c02as0cs (v = vs .110).aspx
Ответ 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 можно настроить для каждой конфигурации, просто выберите конфигурацию, которую вы хотите изменить, в раскрывающемся диалоговом окне "Страницы свойств" и отредактируйте шаг пост-сборки