Równoległe kompilowanie wielu projektów za pomocą programu MSBuild

Można użyć programu MSBuild do kompilacji wielu projektów przez uruchomienie ich równolegle. Aby uruchomić kompilacje równolegle, należy użyć następujących ustawień na komputerze z wieloma procesorami lub procesorem o wielu rdzeniach:

  • Należy użyć przełącznika -maxcpucount w wierszu polecenia.

  • Parametr zadania BuildInParallel w zadaniu programu MSBuild.

Uwaga

Przełącznik -verbosity (-v) w wierszu polecenia może również mieć wpływ na wydajność kompilacji. Wydajność kompilacji może spaść jeśli szczegółowość informacji dziennika kompilacji jest ustawiona na szczegóły lub diagnostyka, które są używane w celu rozwiązania problemów. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dzienników kompilacji i dokumentacja wiersza polecenia.

-maxcpucount Przełącznik

Jeśli używasz przełącznika -maxcpucount lub -m krótko, program MSBuild może utworzyć określoną liczbę procesów MSBuild.exe , które mogą być uruchamiane równolegle. Te procesy są również nazywane "procesami roboczymi". Każdy proces roboczy używa oddzielnego rdzenia lub procesora, jeśli są dostępne, do kompilowania projektu w tym samym czasie, co inne dostępne procesory mogą tworzyć inne projekty. Na przykład ustawienie tego parametru na wartość „4” spowoduje, że program MSBuild utworzy cztery procesy robocze w celu skompilowania projektu.

Jeśli przełącznik -maxcpucount zostanie dołączony, bez określenia wartości, program MSBuild użyje maksymalnie wartości równej liczbie procesorów w komputerze.

Aby uzyskać więcej informacji na temat tego przełącznika, który został wprowadzony w programie MSBuild 3.5, zobacz Dokumentacja wiersza polecenia.

Poniższy przykład powoduje, że program MSBuild będzie używać trzech procesów roboczych. Jeśli używana jest ta konfiguracja, program MSBuild może kompilować trzy projekty w tym samym czasie.

msbuild.exe myproj.proj -maxcpucount:3

Parametr zadania BuildInParallel

BuildInParallel jest opcjonalnym parametrem logicznym w zadaniu MSBuild. Gdy BuildInParallel jest ustawiona wartość true (jej wartość domyślna to true), wiele procesów roboczych jest generowanych w celu kompilowania jak najwięcej projektów w tym samym czasie, jak to możliwe. Aby to działało poprawnie, -maxcpucount przełącznik musi być ustawiony na wartość większą niż 1.

Kompilowanie równolegle działa tylko w przypadku pojedynczego wywołania zadania MSBuild, więc jeśli wywołasz przetwarzanie wsadowe zadań, równoległość jest ograniczona do każdej partii. Zobacz Przetwarzanie wsadowe w programie MSBuild.

W poniższym przykładzie pokazano, jak utworzyć obiekt docelowy w pliku projektu z wieloma różnymi wartościami właściwości równolegle przy użyciu parametru BuildInParallel .

Oto plik do_it.proj projektu z obiektem docelowym, który po prostu wyświetla inny komunikat dla każdego SourceValueelementu :

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

Poniższy projekt tworzy określony obiekt docelowy DoItdo_it.proj równolegle przy użyciu listy elementów i AdditionalProperties metadanych w celu określenia różnych wartości właściwości 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>