Параллельное построение нескольких проектов с помощью 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>