Paralleles Erstellen von mehreren Projekten

MSBuild 3.5 bietet zwei Möglichkeiten, die Buildleistung auf Systemen mit mehreren Prozessoren oder mehreren Prozessorkernen zu optimieren:

  • Durch die Verwendung des /maxcpucount-Schalters in der Befehlszeile.

  • Durch die Verwendung des BuildInParallel-Aufgabenparameters in der MSBuild-Aufgabe.

/Maxcpucount-Schalter

Der /maxcpucount-Schalter (Kurzform /m) ermöglicht MSBuild 3.5 das Erstellen der angegebenen Anzahl von MSBuild.exe-Prozessen, die parallel ausgeführt werden können. Diese Prozesse werden auch als "Arbeitsprozesse" bezeichnet. Jeder Arbeitsprozess verwendet einen anderen Kern oder Prozessor, soweit verfügbar, um ein Projekt zu der gleichen Zeit zu erstellen wie andere verfügbare Prozessoren. Wenn Sie zum Beispiel /maxcpucount auf den Wert "4" festlegen, erstellt MSBuild vier Arbeitsprozesse zum Erstellen des Projekts.

Nachfolgend ist ein Beispiel für die Verwendung des /maxcpucount-Schalters in der Befehlszeile aufgeführt.

C:\WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /maxcpucount:3

In diesem Beispiel wird MSBuild angewiesen, die Erstellung mit drei Arbeitsprozessen durchzuführen. Anhand dieser Konfiguration können drei Projekte gleichzeitig erstellt werden. Um eine optimale Buildleistung sicherzustellen, legen Sie den Wert für /maxcpucount auf die Anzahl der Prozessoren oder Kerne im System fest.

BuildInParallel-Aufgabenparameter

BuildInParallel ist ein optionaler boolescher Parameter für eine MSBuild-Aufgabe. Wenn BuildInParallel auf true (der Standardwert) festgelegt ist, werden mehrere Arbeitsprozesse zum gleichzeitigen Erstellen so vieler Projekte wie möglich erzeugt. Damit dies ordnungsgemäß funktioniert, muss der /maxcpucount-Schalter auf einen Wert größer 1 festgelegt sein, und das System muss mindestens ein Dualcore-System sein oder über mindestens zwei Prozessoren verfügen.

Nachfolgend ist ein Beispiel aus microsoft.common.targets aufgeführt, das veranschaulicht, wie der BuildInParallel-Parameter festgelegt wird.

<PropertyGroup>
    <BuildInParallel Condition="'$(BuildInParallel)' == 
        ''">true</BuildInParallel>
</PropertyGroup>
<MSBuild
    Projects="@(_MSBuildProjectReferenceExistent)"
    Targets="GetTargetPath"
    BuildInParallel="$(BuildInParallel)"
    Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration); 
        %(_MSBuildProjectReferenceExistent.SetPlatform)"
    Condition="'@(NonVCProjectReference)'!='' and 
        ('$(BuildingSolutionFile)' == 'true' or 
        '$(BuildingInsideVisualStudio)' == 'true' or 
        '$(BuildProjectReferences)' != 'true') and   
        '@(_MSBuildProjectReferenceExistent)' != ''"
    ContinueOnError="!$(BuildingProject)">
    <Output TaskParameter="TargetOutputs" 
        ItemName="_ResolvedProjectReferencePaths"/>
</MSBuild>

Siehe auch

Konzepte

Verwenden mehrerer Prozessoren für die Erstellung von Projekten

Schreiben von multiprozessorfähigen Protokollierungen