Freigeben über


MSBuild verwendet mehrere Prozessoren zum Erstellen von Projekten

MSBuild kann die Vorteile von Systemen mit mehreren Prozessoren oder Prozessoren mit mehreren Kernen nutzen, indem ein separater Buildprozess für jeden Prozessor erstellt wird. Wenn ein System beispielsweise vier Prozessoren aufweist, erstellt MSBuild vier Buildprozesse.

MSBuild kann die mehreren Builds gleichzeitig verarbeiten, wodurch die Gesamtbuildzeit reduziert wird. Parallele Builds können Änderungen daran vornehmen, wie die Buildprozesse ablaufen.

In diesem Artikel werden Prozessänderungen beschrieben, die auftreten können, wenn mehrere Builds gleichzeitig ausgeführt werden.

Projekt-zu-Projekt-Verweise

Wenn das Microsoft Build-Modul während paralleler Builds für ein Projekt auf einen Projektverweis (ProjectReference Element) stößt, erstellt es den Verweis nur einmal. Wenn zwei Projekte denselben Projektverweis aufweisen, wird der Verweis für jedes Projekt nicht neu erstellt. Stattdessen gibt das Buildmodul denselben Projektverweis auf beide Projekte zurück, die die Abhängigkeit aufweisen. MSBuild liefert auch denselben Projektverweis für zukünftige Anfragen in der Sitzung für dasselbe Ziel.

Zykluserkennung

Die Zykluserkennung während paralleler Builds ist dasselbe Verhalten wie bei MSBuild 2.0. Der einzige Unterschied besteht darin, dass die neuere Version von MSBuild die Erkennung des Zyklus zu einem anderen Zeitpunkt oder im Build melden kann.

Fehler und Ausnahmen während paralleler Builds

Während paralleler Builds können Fehler und Ausnahmen zu unterschiedlichen Zeiten auftreten als während eines nichtparallel-Builds. Außerdem, wenn ein Projekt nicht erstellt wird, werden die anderen Projekte weiterhin erstellt.

MSBuild stoppt nicht die Ausführung von Projekten, die weiterhin parallel ausgeführt werden, auch wenn ein Build fehlgeschlagen ist. Andere Projekte werden weiterhin erstellt, bis sie erfolgreich sind oder fehlschlagen. Wenn die ContinueOnError Einstellung aktiviert ist, werden keine Builds beendet, auch wenn ein Fehler auftritt.

C++-Projektdateien (.vcxproj) und Solution-Dateien (.sln)

Sowohl C++-Projektdateien (.vcxproj) als auch Projektmappendateien (.sln) können an die MSBuild-Aufgabe übergeben werden.

  • C++-Projekte: Die VCWrapperProject-API wird aufgerufen und dann das interne MSBuild-Projekt erstellt.
  • C++-Lösungen: Eine SolutionWrapperProject-Instanz wird erstellt und dann das interne MSBuild-Projekt erstellt.

In beiden Fällen wird das resultierende Projekt wie jedes andere MSBuild-Projekt behandelt.

Multiprozessausführung

Fast alle buildbezogenen Aktivitäten erfordern, dass das aktuelle Verzeichnis während des gesamten Buildprozesses konstant bleibt, um pfadbezogene Fehler zu verhindern. Projekte können nicht auf verschiedenen Threads in MSBuild ausgeführt werden, da sie die Erstellung mehrerer Verzeichnisse verursachen können.

Um dieses Problem zu vermeiden, aber dennoch Multiprozessorbuilds zu aktivieren, verwendet MSBuild die Prozessisolation. Dieser Prozess ermöglichte MSBuild, eine maximale Anzahl von n Prozessen zu erstellen, wobei n die Anzahl der prozessoren entspricht, die auf dem System verfügbar sind. Wenn MSBuild beispielsweise eine Lösung auf einem System mit zwei Prozessoren erstellt, werden nur zwei Buildprozesse erstellt. Diese Prozesse werden wiederverwendet, um alle Projekte in der Lösung zu erstellen.