Ответ 1
Вы можете ввести столько команд пост-сборки, сколько хотите. Просто отделите их символами новой строки.
Вот пример из одного из моих проектов.
Visual Studio 2008 позволяет мне объявить команду и прикрепить ее к событию после сборки для проекта. Как и многие разработчики, я регулярно использую его для xcopy файлов в выходной каталог приложения.
Я работаю над проектом, где мне нужно xcopy файлы из двух разных мест в два разных адресата, все в рамках одного проекта. Другими словами, мне нужно вызвать две разные команды xcopy из одного события post-build. Похоже, что событие post-build будет принимать только одну команду, и если мне нужно вызвать несколько команд, мне придется поместить команды в файл *.bat и вызвать это из события после сборки.
Правильно ли это, или есть более простой способ вызвать две команды из события после сборки? Заранее благодарим за помощь.
Вы можете ввести столько команд пост-сборки, сколько хотите. Просто отделите их символами новой строки.
Вот пример из одного из моих проектов.
Важно: при выполнении командного файла вы должны использовать оператор "вызов" для упорядочения следующих строк. Если вы не используете "вызов", выполнение переходит в .bat и не возвращается к следующим строкам. То же, что и в подсказке DOS.
например:.
call MyBatch1.bat
call MyBatch2.bat
Каждая команда должна быть отдельной строкой. Однако я обнаружил, что если ошибка, выполняющая одну из этих команд, вся пост-сборка завершается с ошибкой, и поэтому вам нужно попробовать каждую команду пост-сборки по одному для отладки.
Существует еще один вариант: вы можете отделить команды с помощью &&
.
Например.
copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2
Это не то же самое, что и разделение на строки новой строки: при &&
, если предыдущая команда не удалась, следующий commant не будет запущен.
Разделение на новые строки легче читать, поэтому вы должны это предпочесть. Однако я знаю хотя бы один случай, когда &&
полезен. Это сценарий, когда вы используете листы свойств для выполнения разных шагов после сборки на разных машинах. VS 2008 не позволяет напрямую устанавливать PostBuildStep в листы свойств, но вы можете добавить пользовательский макрос с помощью своей команды и вызвать его из основных параметров проекта. Макрос - одна строка, поэтому вы можете использовать &&
, чтобы иметь несколько команд.
Если у вас есть несколько листов свойств с чем-то, что нужно сделать в одном событии сборки, вы можете сделать следующее, чтобы связать команды:
%(Command)
echo foo
где %(Command)
расширяется до предыдущего значения команды.
Лично я делаю это для всех событий сборки, даже если у меня в настоящее время нет унаследованных команд, потому что это гарантирует отсутствие проблем, если я позже добавлю листы свойств.
Подход, предложенный 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.
Просто префикс "вызов" вашей партии script. Таким образом, операторы под патчем script также выполняются после возврата вызова из пакета script.
call Script1.cmd
call Script2.bat