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


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

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

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

9 78

9 ответов:

вы можете ввести столько команд post build, сколько хотите. Просто разделите их по новым линиям.

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

Post Build Event Commandline

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

например:

call MyBatch1.bat
call MyBatch2.bat

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

есть еще один вариант: вы можете разделить команды с &&. Е. Г.

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

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

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

добавлять к womp ' s ответ:

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

%(Command)
echo foo

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

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

разделение команд с помощью & или && или ; не работает в VS2017. Не могу поверить, что такая простая функциональность не доступна в VS2017. Visual studio пытается выполнить весь текст в окне события post build в виде одной строки. Единственный вариант для меня сейчас-создать пакетный скрипт, который мне не особо нравится.

подход, предложенный womp, работает в Visual Studio 2015/2017 (Windows), но не работает в Visual Studio для Mac (предварительный просмотр), который, похоже, выполняет только первую из команд. Единственный подход, который я нашел, работая как в Mac, так и в Windows версиях Visual Studio, - это цепочка 2 команд 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.

нет хорошего решения этой проблемы. Идея вызова вызывает выполнение других сценариев. Я заметил, что обнаружение ошибок не будет работать. Поместите 'exit / b 1' в FailMe.УМК Использование ' вызов FailMe.cmd ' в шагах сборки post. Обратите внимание, что сборка не терпит неудачу? Я использую VS 2017, создавая проект C#. Теперь попробуйте это с ' FailMe.cmd ' сборка теперь сообщает об ошибке.

Так что вам может быть лучше просто использовать один скрипт, если сообщение об ошибке важно.

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

call Script1.cmd
call Script2.bat