Freigeben über


MSBuild-Aufgabe

Erstellt MSBuild-Projekte aus einem anderen MSBuild-Projekt.

Die Parameter

In der folgenden Tabelle werden die Parameter des MSBuild Vorgangs beschrieben.

Parameter BESCHREIBUNG
BuildInParallel Optionaler Boolean-Parameter.

Wenn true, werden die im parameter Projects angegebenen Projekte parallel erstellt, wenn dies möglich ist. Der Standardwert ist false.
Projects Erforderlicher ITaskItem[]-Parameter.

Gibt die zu erstellenden Projektdateien an.
Properties Optionaler String-Parameter.

Eine durch Semikolons getrennte Liste von Eigenschaftsnamen-Wert-Paaren, die als globale Eigenschaften auf das untergeordnete Projekt angewendet werden sollen. Wenn Sie diesen Parameter angeben, entspricht es funktional dem Festlegen von Eigenschaften, die den Schalter -property haben, wenn Sie mit MSBuild.exeerstellen. Beispiel:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Wenn Sie Eigenschaften über den parameter Properties an das Projekt übergeben, erstellt MSBuild möglicherweise eine neue Instanz des Projekts, auch wenn die Projektdatei bereits geladen wurde. MSBuild erstellt eine einzelne Projektinstanz für einen bestimmten Projektpfad und einen eindeutigen Satz globaler Eigenschaften. Mit diesem Verhalten können Sie beispielsweise mehrere MSBuild-Aufgaben erstellen, die myproject.projaufrufen, mit Configuration=Release und Sie erhalten eine einzelne Instanz von myproject.proj (wenn keine eindeutigen Eigenschaften in der Aufgabe angegeben werden). Wenn Sie eine Eigenschaft angeben, die noch nicht von MSBuild gesehen wurde, erstellt MSBuild eine neue Instanz des Projekts, die parallel zu anderen Instanzen des Projekts erstellt werden kann. Eine Releasekonfiguration kann z. B. gleichzeitig mit einer Debugkonfiguration erstellt werden.
RebaseOutputs Optionaler Boolean-Parameter.

Wenn true, werden die relativen Pfade der Zielausgabeelemente aus den erstellten Projekten an ihre Pfade angepasst, um relativ zum aufrufenden Projekt zu sein. Der Standardwert ist false.
RemoveProperties Optionaler String-Parameter.

Gibt den Satz der zu entfernenden globalen Eigenschaften an.
RunEachTargetSeparately Optionaler Boolean-Parameter.

Wenn true, ruft die MSBuild-Aufgabe jedes Ziel in der Liste auf, die jeweils an MSBuild übergeben wird, und nicht gleichzeitig. Wenn Sie diesen Parameter auf true festlegen, wird sichergestellt, dass nachfolgende Ziele auch dann aufgerufen werden, wenn zuvor aufgerufene Ziele fehlgeschlagen sind. Andernfalls würde ein Buildfehler den Aufruf aller nachfolgenden Ziele beenden. Der Standardwert ist false.
SkipNonexistentProjects Optionaler Boolean-Parameter.

Wenn true, werden Projektdateien, die auf dem Datenträger nicht vorhanden sind, übersprungen. Andernfalls verursachen solche Projekte einen Fehler. Standardmäßig auf falseeingestellt.
SkipNonexistentTargets Optionaler Boolean-Parameter.

Wenn true, werden Projektdateien, die vorhanden sind, aber nicht den benannten Targets enthalten, übersprungen. Andernfalls verursachen solche Projekte einen Fehler. Standardmäßig auf falseeingestellt. Eingeführt in MSBuild 15.5.
StopOnFirstFailure Optionaler Boolean-Parameter.

Wenn true, wenn eines der Projekte nicht erstellt werden kann, werden keine weiteren Projekte erstellt. Derzeit wird diese Option beim Erstellen parallel (mit mehreren Prozessoren) nicht unterstützt.
TargetAndPropertyListSeparators Optionaler String[]-Parameter.

Gibt eine Liste von Zielen und Eigenschaften als Project Elementmetadaten an). Trennzeichen werden vor der Verarbeitung nicht gescapet. Beispielsweise wird %3B (ein escaped ';' ) so behandelt, als wäre es ein unescaped ';'.
TargetOutputs Optionaler ITaskItem[] schreibgeschützter Ausgabeparameter.

Gibt die Ausgaben der erstellten Ziele aus allen Projektdateien zurück. Nur die Ausgaben der angegebenen Ziele werden zurückgegeben, nicht alle Ausgaben, die für Ziele vorhanden sein können, von denen diese Ziele abhängen.

Der parameter TargetOutputs enthält auch die folgenden Metadaten:

- MSBuildSourceProjectFile: Die MSBuild-Projektdatei, die das Ziel enthält, das die Ausgaben festgelegt hat.
- MSBuildSourceTargetName: Das Ziel, das die Ausgaben festgelegt hat. Hinweis: Wenn Sie die Ausgaben aus jeder Projektdatei oder jedem Ziel separat identifizieren möchten, führen Sie den MSBuild Vorgang für jede Projektdatei oder jedes Ziel separat aus. Wenn Sie den MSBuild Vorgang nur einmal ausführen, um alle Projektdateien zu erstellen, werden die Ausgaben aller Ziele in einem Array gesammelt.
Targets Optionaler String-Parameter.

Gibt das Ziel oder die Ziele an, die in den Projektdateien erstellt werden sollen. Verwenden Sie ein Semikolon, um eine Liste von Zielnamen zu trennen. Wenn im MSBuild Vorgang keine Ziele angegeben sind, werden die in den Projektdateien angegebenen Standardziele erstellt. Hinweis: Die Ziele müssen in allen Projektdateien auftreten. Wenn dies nicht der Fall ist, tritt ein Buildfehler auf.
ToolsVersion Optionaler String-Parameter.

Gibt die ToolsVersion an, die beim Erstellen von Projekten verwendet werden sollen, die an diese Aufgabe übergeben werden.

Ermöglicht es einer MSBuild-Aufgabe, ein Projekt zu erstellen, das auf eine andere Version von .NET Framework ausgerichtet ist als die im Projekt angegebene. Gültige Werte sind 2.0, 3.0und 3.5. Der Standardwert ist 3.5.

Bemerkungen

Zusätzlich zu den zuvor aufgeführten Parametern erbt diese Aufgabe Parameter von der TaskExtension-Klasse, die selbst von der Task Klasse erbt. Eine Liste dieser zusätzlichen Parameter und deren Beschreibungen finden Sie unter TaskExtension-Basisklasse.

Im Gegensatz zur Verwendung der Exec-Aufgabe zum Starten MSBuild.exeverwendet diese Aufgabe den gleichen MSBuild-Prozess, um die untergeordneten Projekte zu erstellen. Die Liste der bereits erstellten Ziele, die übersprungen werden können, wird zwischen den übergeordneten und untergeordneten Builds geteilt. Diese Aufgabe ist auch schneller, da kein neuer MSBuild-Prozess erstellt wird.

Diese Aufgabe kann nicht nur Projektdateien, sondern auch Lösungsdateien verarbeiten. In MSBuild 17.12 und höher werden sowohl .slnx- als auch .sln Lösungsdateiformate akzeptiert.

Jede Konfiguration, die von MSBuild benötigt wird, damit Projekte gleichzeitig erstellt werden können, auch wenn die Konfiguration Remoteinfrastruktur umfasst (z. B. Ports, Protokolle, Timeouts, Wiederholungen usw.), müssen mithilfe einer Konfigurationsdatei konfiguriert werden. Wenn möglich, sollten Konfigurationselemente als Vorgangsparameter für den MSBuild Vorgang angegeben werden können.

Ab MSBuild 3.5 können Projektmappenprojekte jetzt TargetOutputs aus allen Teilprojekten anzeigen, die erstellt werden.

Übergeben von Eigenschaften an Projekte

In Versionen von MSBuild vor MSBuild 3.5 war es schwierig, verschiedene Eigenschaftensätze an verschiedene Projekte zu übergeben, die im MSBuild-Element aufgeführt sind. Wenn Sie das Properties-Attribut des MSBuild-Vorgangsverwendet haben, wurde die Einstellung auf alle erstellten Projekte angewendet, es sei denn, Sie haben die MSBuild-Aufgabe batched und unterschiedliche Eigenschaften für jedes Projekt in der Elementliste bereitgestellt.

MSBuild 3.5 bietet jedoch zwei neue reservierte Metadatenelemente, Properties und AdditionalProperties, die Ihnen eine flexible Möglichkeit bieten, verschiedene Eigenschaften für verschiedene Projekte zu übergeben, die mit der MSBuild-Aufgabeerstellt werden.

Hinweis

Diese neuen Metadatenelemente gelten nur für Elemente, die im Projects-Attribut der MSBuild-Aufgabeübergeben werden.

Vorteile des Multiprozessorbuilds

Einer der wichtigsten Vorteile der Verwendung dieser neuen Metadaten tritt auf, wenn Sie Ihre Projekte parallel auf einem Multiprozessorsystem erstellen. Mit den Metadaten können Sie alle Projekte in einer einzelnen MSBuild-Aufgabe konsolidieren, Aufruf ohne Batchverarbeitung oder bedingte MSBuild-Aufgaben ausführen zu müssen. Und wenn Sie nur einen einzelnen MSBuild-Vorgangaufrufen, werden alle im Attribut "Projects" aufgeführten Projekte parallel erstellt. (Nur wenn das BuildInParallel=true-Attribut in der MSBuild-Aufgabe vorhanden ist,.) Weitere Informationen finden Sie unter Erstellen mehrerer Projekte parallel.

Eigenschaftenmetadaten

Wenn angegeben, überschreibt die Eigenschaftenmetadaten den Eigenschaftenparameter der Aufgabe, während AdditionalProperties- Metadaten an die Definitionen des Parameters angefügt werden.

Ein häufiges Szenario ist das Erstellen mehrerer Lösungsdateien mithilfe der MSBuild-Aufgabe, nur mit unterschiedlichen Buildkonfigurationen. Möglicherweise möchten Sie die Lösung a1 mit der Debugkonfiguration und Lösung a2 mithilfe der Release-Konfiguration erstellen. In MSBuild 2.0 würde diese Projektdatei wie folgt aussehen:

Hinweis

Im folgenden Beispiel lautet "..." stellt zusätzliche Lösungsdateien dar.

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Mithilfe der Eigenschaftenmetadaten können Sie diesen Code jedoch vereinfachen, um eine einzelne MSBuild-Aufgabezu verwenden, wie im folgenden Beispiel gezeigt:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>
</Project>

-oder-

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln..."/>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Debug"/>
    </Target>
</Project>

AdditionalProperties-Metadaten

Betrachten Sie das folgende Szenario, in dem Sie zwei Lösungsdateien mithilfe der MSBuild-Aufgabeerstellen, die beide die Release-Konfiguration verwenden, aber eine, die die x86-Architektur und die andere mit der ia64-Architektur verwendet. In MSBuild 2.0 müssen Sie mehrere Instanzen der MSBuild-Aufgabeerstellen: eine zum Erstellen des Projekts mithilfe der Release-Konfiguration mit der x86-Architektur, die andere, die die Releasekonfiguration mit der ia64-Architektur verwendet. Ihre Projektdatei würde wie folgt aussehen:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;
          Architecture=x86"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;
          Architecture=ia64"/>
    </Target>
</Project>

Mithilfe der AdditionalProperties-Metadaten können Sie dies vereinfachen, um eine einzelne MSBuild-Task- zu verwenden, indem Sie Folgendes verwenden:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <AdditionalProperties>Architecture=x86
              </AdditionalProperties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <AdditionalProperties>Architecture=ia64
              </AdditionalProperties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Release"/>
    </Target>
</Project>

Beispiel

Im folgenden Beispiel wird die MSBuild Aufgabe verwendet, um die von der ProjectReferences Elementauflistung angegebenen Projekte zu erstellen. Die resultierenden Zielausgaben werden in der AssembliesBuiltByChildProjects Elementauflistung gespeichert.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Siehe auch