Udostępnij za pośrednictwem


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 DoIt do_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>