Создание нескольких проектов параллельно с MSBuild

Чтобы ускорить сборку нескольких проектов, можно использовать MSBuild для параллельного выполнения сборок. Для этого используйте следующие настройки на многопроцессорных или многопроцессорных компьютерах:

  • Установите переключатель -maxcpucount при запуске MSBuild в командной строке.

  • Задайте параметр BuildInParallel задачи как true на вашей задаче MSBuild.

Замечание

Производительность сборки может снизиться, если вы используете переключатель -verbosity (-v), чтобы установить подробный или диагностический уровень детализации сведений в журнале сборки. Этот переключатель часто используется для устранения неполадок. Дополнительные сведения см. в разделе "Получение журналов сборки с помощью MSBuild" и справочник по командной строке MSBuild.

-maxcpucount параметр MSBuild

При использовании переключателя -maxcpucount (-m) MSBuild создает указанное количество MSBuild.exe процессов, которые могут выполняться параллельно. Эти процессы также называются рабочими процессами. Каждый рабочий процесс использует отдельный ядро или процессор, если они доступны, для создания проекта одновременно, так как другие доступные процессоры могут создавать другие проекты. Например, при задании этого переключателя значением 4, MSBuild создаёт четыре рабочих процесса для сборки проекта.

Если параметр -maxcpucount включен без указания значения, MSBuild использует до количества процессоров на компьютере.

Дополнительные сведения об этом коммутаторе см. в справочнике по командной строке MSBuild.

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

msbuild.exe myproj.proj -maxcpucount:3

Параметр BuildInParallel в задаче MSBuild

BuildInParallel — необязательный логический параметр, который можно задать в задаче MSBuild. Если заданы значения BuildInParalleltrue (по умолчанию), создается несколько рабочих процессов, чтобы одновременно создавать как можно больше проектов. Чтобы этот параметр работал правильно, установите переключатель -maxcpucount на значение больше единицы.

При использовании MSBuild для параллельного создания он работает только для одного вызова задачи MSBuild. Поэтому при вызове пакетной обработки задач параллелизм ограничен каждым пакетом. Дополнительные сведения см. в разделе пакетной обработки MSBuild.

В следующих примерах показано, как создать целевой объект в файле проекта с несколькими разными значениями свойств параллельно с помощью BuildInParallel параметра.

В этом примере файл do_it.proj проекта имеет целевой объект, который печатает другое сообщение для каждого SourceValue.

<Project>
   <Target Name="DoIt">
      <Message Text="For this invocation SourceValue='$(SourceValue)'" Importance="High" />
   </Target>
</Project>

Следующий проект создает указанный целевой объект DoIt в проекте с именем do_it.proj параллельно, используя список элементов и AdditionalProperties метаданные для указания различных значений свойства SourceValue.

<Project>
   <ItemGroup>
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test1" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test2" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test3" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test4" />
   </ItemGroup>
   <Target Name="Build">
      <MSBuild Projects="@(_Project)" Targets="DoIt" BuildInParallel="true" />
   </Target>
</Project>