Несколько событий предварительной сборки в Visual Studio?

Я проследил за публикацией в блоге Скотта Хансельмана (Scott Hanselman) для управления настройкой с помощью PreBuild Events, и он работает отлично

Теперь я хочу разделить свою конфигурацию на пару разных файлов, поэтому перед сборкой нужно снова выполнить команду. Проблема в том, что текст события PreBuild выполняется как одна консольная команда. Как я могу разделить его на несколько команд?

3 ответа

Решение

Оказывается, проблема в том, что пример Скотта не включает call Команда в начале строки. Это хорошо, если вы не хотите выполнять .bat файл несколько раз с разными параметрами.

Это:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config"
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config"

работал нормально для меня.

Я использую Visual Studio 2010 на Windows 7 64-разрядных.

Я нашел решение, которое лучше мне по вкусу, я объединяю команды вместе с && ^Например, редактирование моего XML-файла.vcxproj примерно так:

    <PreBuildEvent>
      <Command>echo "hello 1" &amp;&amp; ^
echo "hello 2" &amp;&amp; ^
echo "hello 3"</Command>
      <Message>Performaing pre-build actions ...</Message>
    </PreBuildEvent>

Я связал три команды вместе. '&&' указывает оболочке прекратить выполнение в случае ошибки предыдущей команды.

Обратите внимание, что в XML-файле нельзя использовать && напрямую, поэтому & amp;& amp; должен быть использован вместо Также обратите внимание на использование ^ символ, это символ продолжения строки командной оболочки (как BASH \ голец).

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

Вот мой реальный пример использования: я выполняю некоторые проверки среды с помощью скрипта Python, после чего копирую файл отладки моего предварительно скомпилированного заголовка в каталог другого подпроекта:

    <PreBuildEvent>
        <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp; ^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command>
        <Message>Performaing pre-build actions ...</Message>
    </PreBuildEvent>

> nul использование команды copy предотвращает появление какого-либо вывода в окне сборки, поэтому мои товарищи по команде не пугаются 0 file(s) copied.

Ссылка на разделение предварительно скомпилированных заголовков между подпроектами здесь:

Совместное использование предварительно скомпилированных заголовков между проектами в Visual Studio

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

  • Создайте второй пакетный файл, который запускает требуемую часть новой функциональности, затем создайте родительский пакет, который запускает два пакетных файла компонента, и запустите этот новый пакет в событии перед сборкой. Например: batch1.bat изменяет файл 1, batch2.bat изменяет файл 2, затем batch3.bat запускает как batch1.bat, так и batch2.bat.
Другие вопросы по тегам