Gewusst wie: Erstellen identischer Quelldateien mit unterschiedlichen Optionen

Wenn Sie Projekte erstellen, kompilieren Sie häufig die gleichen Komponenten mit unterschiedlichen Buildoptionen.So können Sie beispielsweise ein Debugbuild mit Symbolinformationen oder ein Releasebuild ohne Symbolinformationen, dafür aber mit aktivierten Optimierungen, erstellen.Alternativ können Sie ein Projekt erstellen, das auf einer bestimmten Plattform wie x86 oder x64 ausgeführt werden soll.In allen diesen Fällen bleiben die meisten Buildoptionen unverändert. Nur einige Optionen werden zur Steuerung der Buildkonfiguration geändert.Bei MSBuild verwenden Sie Eigenschaften und Bedingungen, um die verschiedenen Buildkonfigurationen zu erstellen.

Verwenden von Eigenschaften zum Ändern von Projekten

Das Property-Element definiert eine Variable, auf die in einer Projektdatei mehrfach verwiesen wird. Die Variable kann beispielsweise den Speicherort eines temporären Verzeichnisses angeben oder zum Festlegen der Eigenschaftswerte für verschiedene Konfigurationen verwendet werden, beispielsweise Debug- und Releasebuilds.Weitere Informationen zu Eigenschaften finden Sie unter MSBuild-Eigenschaften.

Sie können Eigenschaften verwenden, um die Konfiguration des Builds zu ändern, ohne die Projektdatei zu modifizieren.Das Condition-Attribut des Property-Elements und das PropertyGroup-Element ermöglichen Ihnen, den Wert von Eigenschaften zu ändern.Weitere Informationen zu MSBuild-Bedingungen finden Sie unter MSBuild-Bedingungen.

So legen Sie eine Gruppe von Eigenschaften auf Grundlage einer anderen Eigenschaft fest

  • Verwenden Sie ein Condition-Attribut in einem mit dem folgenden Beispiel vergleichbaren PropertyGroup-Element:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>
    

So definieren Sie eine Eigenschaft auf der Grundlage einer anderen Eigenschaft

  • Verwenden Sie ein Condition-Attribut in einem mit dem folgenden Beispiel vergleichbaren Property-Element:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    

Angeben von Eigenschaften in der Befehlszeile

Wenn die Projektdatei geschrieben wurde und mehrere Konfigurationen zulässt, müssen Sie diese Konfigurationen beim Erstellen des Projekts ändern können.MSBuild bietet diese Möglichkeit, indem Eigenschaften mit dem /property-Schalter oder dem /p-Schalter an der Befehlszeile angegeben werden können.

So legen Sie eine Projekteigenschaft in der Befehlszeile fest

  • Verwenden Sie den Schalter /property mit der Eigenschaft und dem Eigenschaftswert.Beispiel:

    msbuild file.proj /property:Flavor=Debug
    

    - oder -

    Msbuild file.proj /p:Flavor=Debug
    

So geben Sie mehrere Projekteigenschaften in der Befehlszeile an

  • Verwenden Sie den Schalter /property oder /p mehrere Male mit der Eigenschaft und den Eigenschaftswerten, oder verwenden Sie den Schalter /property oder /p einmal, und trennen Sie mehrere Eigenschaften mithilfe von Semikolons (;).Beispiel:

    msbuild file.proj /p:Flavor=Debug;Platform=x86
    

    - oder -

    msbuild file.proj /p:Flavor=Debug /p:Platform=x86
    

Umgebungsvariablen werden ebenfalls als Eigenschaften behandelt und automatisch von MSBuild integriert.Weitere Informationen zur Verwendung von Umgebungsvariablen finden Sie unter Gewusst wie: Verwenden von Umgebungsvariablen in einem Build.

Der in der Befehlszeile festgelegte Eigenschaftswert hat Vorrang vor allen anderen Werten, die für dieselbe Eigenschaft in der Projektdatei festgelegt wurden. Der Wert in der Projektdatei hat wiederum Vorrang vor dem Wert in der Umgebungsvariablen.

Sie können dieses Verhalten ändern, indem Sie das - Attribut in einem TreatAsLocalProperty Projekttag verwenden.Für Eigenschaftennamen, die mit diesem Attribut aufgeführt werden, kann der - Eigenschaftswert, der in der Befehlszeile angegeben wird, keinen Vorrang vor dem Wert in der Projektdatei.Sie können ein Beispiel weiter unten in diesem Thema suchen.

Beispiel

Das folgende Codebeispiel, das "Hello world-" Projekt, enthält zwei neue Eigenschaftengruppen, die verwendet werden können, um einen Debugbuild und einen Releasebuild zu erstellen.

Um die Debugversion dieses Projekts zu erstellen, geben Sie Folgendes ein:

msbuild consolehwcs1.proj /p:flavor=debug

Um die Einzelhandelsversion dieses Projekts zu erstellen, geben Sie Folgendes ein:

msbuild consolehwcs1.proj /p:flavor=retail

<Project DefaultTargets = "Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Sets the default flavor of an environment variable called 
    Flavor is not set or specified on the command line -->
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
    </PropertyGroup>

    <!-- Define the DEBUG settings -->
    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>

    <!-- Define the RETAIL settings -->
    <PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
        <DebugType>pdbonly</DebugType>
        <Optimize>yes</Optimize>
    </PropertyGroup>

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "consolehwcs1.cs"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual C# compilation using input files
        of type CSFile -->
        <CSC  Sources = "@(CSFile)"
            DebugType="$(DebugType)"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe" >

            <!-- Set the OutputAssembly attribute of the CSC
            task to the name of the executable file that is 
            created -->
            <Output TaskParameter="OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Das folgende Beispiel veranschaulicht, wie das - Attribut TreatAsLocalProperty verwendet.Die Color-Eigenschaft hat einen Wert von Blue in der Projektdatei und von Green in der Befehlszeile.Mit TreatAsLocalProperty="Color" im Projekttag, überschreibt die Befehlszeileneigenschaft (Green) nicht die - Eigenschaft, die in der Projektdatei (Blue) definiert ist.

Um das Projekt zu erstellen, geben Sie den folgenden Befehl ein:

msbuild colortest.proj /t:go /property:Color=Green

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">

    <PropertyGroup>
        <Color>Blue</Color>
    </PropertyGroup>

    <Target Name="go">
        <Message Text="Color: $(Color)" />
    </Target>
</Project>

<!--
  Output with TreatAsLocalProperty="Color" in project tag:
     Color: Blue

  Output without TreatAsLocalProperty="Color" in project tag:
     Color: Green
-->

Siehe auch

Referenz

Project-Element (MSBuild)

Weitere Ressourcen

MSBuild

MSBuild-Grundlagen

MSBuild-Referenz