Параллельное построение нескольких проектов с помощью MSBuild

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

  • параметр -maxcpucount в командной строке;

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

Примечание.

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

Параметр -maxcpucount

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

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

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

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

msbuild.exe myproj.proj -maxcpucount:3

Параметр задачи BuildInParallel

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

Создание параллельно работает только для одного вызова задачи 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>