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 SourceValue
elementu :
<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>