Verwenden mehrerer Prozessoren für die Erstellung von Projekten

MSBuild kann Systeme nutzen, die über mehrere Prozessoren oder Prozessoren mit mehreren Kernen verfügen. Für jeden verfügbaren Prozessor wird ein separater Buildprozess erstellt. Wenn das System zum Beispiel über vier Prozessoren verfügt, werden vier Buildprozesse erstellt. MSBuild kann diese Builds gleichzeitig verarbeiten und daher die Gesamtbuildzeit verringern. Das gleichzeitige Erstellen von Builds führt jedoch zu einigen Änderungen bei Buildprozessen. In diesem Thema werden diese Änderungen erläutert.

Projekt-zu-Projekt-Verweise

Wenn die Microsoft-Build-Engine einen Projekt-zu-Projekt-Verweis (P2P) ermittelt, während parallele Builds zum Erstellen eines Projekts verwendet werden, wird der Verweis nur einmal erstellt. Wenn zwei Projekte über den gleichen P2P-Verweis verfügen, wird der Verweis nicht für jedes Projekt neu erstellt. Stattdessen gibt die Build-Engine den gleichen P2P-Verweis an beide Projekte zurück, die davon abhängen. Zukünftige Anforderungen in der Sitzung für das gleiche Ziel erhalten den gleichen P2P-Verweis.

Schleifenerkennung

Die Zykluserkennung funktioniert genauso wie bei MSBuild 2.0, mit der Ausnahme, dass MSBuild nun Berichte über die Erkennung eines Zyklus zu einem anderen Zeitpunkt oder im Build erstellen kann.

Fehler und Ausnahmen bei der parallelen Builderstellung

Bei der parallelen Builderstellung können Fehler und Ausnahmen zu einem anderen Zeitpunkt auftreten als bei der nicht parallelen Builderstellung; außerdem kann die Erstellung eines anderen Builds fortgesetzt werden, wenn ein Build nicht erstellt werden kann. MSBuild beendet keinen Projektbuild, der parallel mit einem fehlerhaften Build ausgeführt wird. Der Buildprozess anderer Projekte wird fortgesetzt, bis er erfolgreich abgeschlossen oder fehlgeschlagen ist. Wenn jedoch ContinueOnError aktiviert wurde, wird die Erstellung von Builds nicht abgebrochen, auch wenn ein Fehler auftritt.

C++-Projektdateien (.vcproj) und Projektmappendateien (.sln)

Sowohl C++-Projekt- als auch -Projektmappendateien ( .vcxproj und .sln) können an die MSBuild-Aufgabe übergeben werden. Für C++-Projekte wird VCWrapperProject aufgerufen, und anschließend wird das interne MSBuild-Projekt erstellt. Für C++-Projektmappen wird SolutionWrapperProject, und anschließend wird das interne MSBuild-Projekt erstellt. In beiden Fällen wird das resultierende Projekt auf die gleiche Weise behandelt wie jedes andere MSBuild-Projekt.

Multiprozessausführung

Bei fast allen buildbezogenen Aktivitäten ist es erforderlich, dass das aktuelle Verzeichnis während des Buildprozesses gleich bleibt, um pfadbezogene Fehler zu vermeiden. Aus diesem Grund können Projekte in MSBuild nicht in verschiedenen Threads ausgeführt werden, weil dies zur Erstellung mehrerer Verzeichnisse führen würde.

Um dieses Problem zu vermeiden, aber immer noch Multi-Prozessor-Builds zu aktivieren, verwendet MSBuild "Prozessisolation". Mithilfe der Prozessisolation kann MSBuild maximal n Prozesse erstellen, wobei n die Anzahl der auf dem System verfügbaren Prozessoren gleich ist. Wenn MSBuild zum Beispiel eine Projektmappe auf einem System mit zwei Prozessoren erstellt, werden nur zwei Buildprozesse erstellt. Diese Prozesse werden zum Erstellen aller Projekte der Lösung wiederverwendet.