Visual Studio 2008 позволяет мне объявить команду и прикрепить ее к событию после сборки проекта. Как и многие разработчики, я регулярно использую его для копирования файлов в выходной каталог приложения.
Я работаю над проектом, в котором мне нужно скопировать файлы из двух разных мест в два разных места назначения, и все это в рамках одного проекта. Другими словами, мне нужно вызвать две разные команды xcopy из одного и того же события после сборки. Похоже, что событие после сборки примет только одну команду, и что если мне нужно вызвать несколько команд, мне придется поместить команды в файл * .bat и вызвать его из события после сборки.
Это правильно, или есть более простой способ вызвать две команды из события после сборки? Заранее спасибо за вашу помощь.
источник
Важно: при выполнении командного файла вы должны использовать оператор "call" для того, чтобы следующие строки выполнялись. Если вы не используете "call", выполнение переходит в .bat и не возвращается к следующим строкам. То же, что и в командной строке DOS.
например:
источник
Есть еще один вариант: вы можете разделить команды с помощью
&&
. Напримерcopy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2
Это не совсем то же самое, что разделение с помощью новой строки: с
&&
, если предыдущая команда не удалась, следующая команда не запустится.Разделение символами новой строки легче читать, поэтому вы должны предпочесть его. Однако я знаю хотя бы один случай, когда
&&
это пригодится. Это сценарий, когда вы используете листы свойств для выполнения различных шагов после сборки на разных машинах. VS 2008 не позволяет напрямую устанавливать PostBuildStep на листах свойств, но вы можете добавить пользовательский макрос с вашей командой и вызвать его из основных настроек проекта. Макрос состоит из одной строки, поэтому вы можете использовать&&
там несколько команд.источник
Каждая команда должна быть в отдельной строке. Однако я обнаружил, что если возникает ошибка при выполнении одной из этих команд, вся пост-сборка завершается ошибкой, и поэтому вам нужно будет пробовать каждую команду пост-сборки по одной для отладки.
источник
Разделение команд с помощью & или && или; не работает в VS2017. Не могу поверить, что такая простая функциональность недоступна в VS2017. Visual Studio пытается выполнить весь текст в окне события пост-сборки как одну строку. Единственный вариант для меня сейчас - создать пакетный скрипт, который мне не особенно нравится.
источник
Добавление к WOMP «s ответ :
Если у вас есть несколько листов свойств с чем-то, что нужно сделать в одном событии сборки, вы можете сделать следующее, чтобы связать команды:
где
%(Command)
заменяется на предыдущее значение команды.Лично я делаю это для всех событий сборки, даже если в настоящее время у меня нет унаследованных команд, потому что это гарантирует, что не возникнет проблем, если я добавлю листы свойств позже.
источник
exit
пакетного оператора в любом месте цепочки приводит к прерыванию цепочки. В самом деле,exit 1
вызывает сбой сборки,exit 0
просто прерывает шаг, и сборка продолжается.В Visual Studio 2017 вы можете сделать это:
источник
Подход, предложенный womp, работает в Visual Studio 2015/2017 (Windows), но не работает в Visual Studio для Mac (предварительная версия), который, похоже, выполняет только первую из команд. Единственный подход, который я нашел работающим как в версиях Visual Studio для Mac, так и в Windows, заключался в объединении двух команд MSBuild:
В приведенном выше примере используется событие AfterResolveReferences, но оно, очевидно, должно работать и для события PostBuild.
источник
У этой проблемы нет хорошего решения. Идея вызова вызывает запуск других скриптов. Я заметил, что обнаружение ошибок не работает. Поместите «exit / b 1» в FailMe.cmd. Используйте «call FailMe.cmd» на этапах пост-сборки. Заметили, что сборка не завершается ошибкой? Я использую VS 2017 для создания проекта C #. Теперь попробуйте с "FailMe.cmd". Теперь сборка сообщает об ошибке.
Так что вам может быть лучше просто использовать один скрипт, если важен отчет об ошибках.
источник
Просто добавьте префикс «вызов» к вашему пакетному сценарию. Таким образом, операторы под пакетным сценарием также выполняются после возврата вызова из пакетного сценария.
источник