Visual Studio: несколько команд после сборки?

Visual Studio 2008 позволяет мне объявить команду и прикрепить ее к событию после сборки для проекта. Как и многие разработчики, я регулярно использую его для xcopy файлов в выходной каталог приложения.

Я работаю над проектом, где мне нужно xcopy файлы из двух разных мест в два разных адресата, все в рамках одного проекта. Другими словами, мне нужно вызвать две разные команды xcopy из одного события post-build. Похоже, что событие post-build будет принимать только одну команду, и если мне нужно вызвать несколько команд, мне придется поместить команды в файл *.bat и вызвать это из события после сборки.

Правильно ли это, или есть более простой способ вызвать две команды из события после сборки? Заранее благодарим за помощь.

Ответ 1

Вы можете ввести столько команд пост-сборки, сколько хотите. Просто отделите их символами новой строки.

Вот пример из одного из моих проектов.

Post Build Event Commandline

Ответ 2

Важно: при выполнении командного файла вы должны использовать оператор "вызов" для упорядочения следующих строк. Если вы не используете "вызов", выполнение переходит в .bat и не возвращается к следующим строкам. То же, что и в подсказке DOS.

например:.

call MyBatch1.bat
call MyBatch2.bat

Ответ 3

Каждая команда должна быть отдельной строкой. Однако я обнаружил, что если ошибка, выполняющая одну из этих команд, вся пост-сборка завершается с ошибкой, и поэтому вам нужно попробовать каждую команду пост-сборки по одному для отладки.

Ответ 4

Существует еще один вариант: вы можете отделить команды с помощью &&. Например.

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

Это не то же самое, что и разделение на строки новой строки: при &&, если предыдущая команда не удалась, следующий commant не будет запущен.

Разделение на новые строки легче читать, поэтому вы должны это предпочесть. Однако я знаю хотя бы один случай, когда && полезен. Это сценарий, когда вы используете листы свойств для выполнения разных шагов после сборки на разных машинах. VS 2008 не позволяет напрямую устанавливать PostBuildStep в листы свойств, но вы можете добавить пользовательский макрос с помощью своей команды и вызвать его из основных параметров проекта. Макрос - одна строка, поэтому вы можете использовать &&, чтобы иметь несколько команд.

Ответ 5

Добавление к womp answer:

Если у вас есть несколько листов свойств с чем-то, что нужно сделать в одном событии сборки, вы можете сделать следующее, чтобы связать команды:

%(Command)
echo foo

где %(Command) расширяется до предыдущего значения команды.

Лично я делаю это для всех событий сборки, даже если у меня в настоящее время нет унаследованных команд, потому что это гарантирует отсутствие проблем, если я позже добавлю листы свойств.

Ответ 6

Подход, предложенный womp работает в Visual Studio 2015/2017 (Windows), но не работает в Visual Studio для Mac (Preview), который, похоже, выполняет только первую из команд. Единственный подход, который я нашел в Mac и Windows версии Visual Studio, - это объединение двух команд MSBuild:

<Target Name="AfterResolveReferences">
<Exec Command="path\MyFirstCommand.exe -parameters" />
</Target>
<Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" >
<Exec Command="path\MySecondCommand.exe -parameters" />
</Target>

В приведенном выше примере используется событие "AfterResolveReferences", но должно явно работать и для события PostBuild.

Ответ 7

Просто префикс "вызов" вашей партии script. Таким образом, операторы под патчем script также выполняются после возврата вызова из пакета script.

call Script1.cmd
call Script2.bat