Verwenden mehrerer Prozessoren für die Erstellung von Projekten

Aktualisiert: November 2007

Visual Studio 2008 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, sodass die Gesamtzeit für die Builderstellung verringert wird. Die parallele Erstellung führt jedoch zu einigen Änderungen beim Auftreten der Buildprozesse. 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. In MSBuild wird die Builderstellung nicht abgebrochen, wenn es bei der Erstellung eines parallelen Builds zu einem Fehler kommt. Die Erstellung anderer Projekte wird fortgesetzt, bis sie erfolgreich erstellt wurden oder aufgrund eines Fehlers nicht erstellt werden können. 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

MSBuild-Aufgaben

Weitere Ressourcen

Builderstellung für bestimmte .NET Framework-Versionen