Freigeben über


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 Microsoft Build Engine einen Projekt-zu-Projekt-Verweis (P2P) entdeckt, 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 das Buildmodul 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 Schleifenerkennung funktioniert genauso wie bei MSBuild 2.0, mit der Ausnahme, dass MSBuild nun Berichte über die Erkennung einer Schleife 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 gleichzeitig ausgeführte Projektbuilds nicht zusammen mit einem fehlgeschlagenen Build. 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.

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

Sowohl Visual C++-Projektdateien (.vcproj) als auch Projektmappendateien (.sln) können an MSBuild-Aufgabe übergeben werden. Bei Visual C++-Projekten wird VCWrapperProject aufgerufen, woraufhin das interne MSBuild-Projekt erstellt wird. Für Visual C++-Projektmappen wird ein SolutionWrapperProject erstellt, woraufhin das interne MSBuild-Projekt erstellt wird. In beiden Fällen wird das daraus 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 auf verschiedenen Threads ausgeführt werden, da dies zur Erstellung mehrerer Verzeichnisse führen würde.

Um dieses Problem zu vermeiden und trotzdem Multiprozessorbuilds zu ermöglichen, verwendet MSBuild die "Prozessisolierung". Durch die Verwendung der Prozessisolierung kann MSBuild maximal n-Prozesse erstellen, wobei n der Anzahl der im System verfügbaren Prozessoren entspricht. Wenn MSBuild zum Beispiel eine Lösung auf einem System mit zwei Prozessoren erstellt, werden nur zwei Buildprozessoren erstellt. Diese Prozesse werden zum Erstellen aller Projekte der Lösung wiederverwendet.

Siehe auch

Konzepte

Paralleles Erstellen von mehreren Projekten mit MSBuild

MSBuild-Aufgaben