Подтвердить что ты не робот

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

Я следил за записью в блоге Скоттом Хансельманом для управления конфигурацией с событиями PreBuild и отлично работает.

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

4b9b3361

Ответ 1

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

Это:

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

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

Ответ 2

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

Я нашел решение, которое мне по душе, я объединяю команды вместе с && ^, например, редактируя файл .vcxproj xml следующим образом:

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

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

Обратите внимание: в XML файле нельзя использовать && напрямую, поэтому '& & '. Также обратите внимание на использование символа ^, это символ продолжения строки оболочки CMD (например, BASH \ char).

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

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

    <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 в команде копирования предотвращает появление любого результата в окне сборки, поэтому мои товарищи по команде не будут волноваться, когда говорят 0 file(s) copied.

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

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

Ответ 3

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

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