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