Dela via


Skapa flera byggkonfigurationer för dina källfiler

När du skapar projekt kompilerar du ofta samma komponenter med olika byggalternativ. Du kan till exempel skapa en felsökningsversion med symbolinformation eller en versionsversion utan symbolinformation, men med optimeringar aktiverade. Eller så kan du skapa ett projekt som ska köras på en specifik plattform, till exempel x86 eller x64. I alla dessa fall förblir de flesta byggalternativen desamma. Endast ett fåtal alternativ ändras för att styra byggkonfigurationen. Med MSBuild använder du egenskaper och villkor för att skapa de olika byggkonfigurationerna för dina källfiler.

Använda egenskaper för att styra bygginställningar

Elementet Property definierar en variabel som har flera referenser i en projektfil. Variabeln kan identifiera platsen för en tillfällig katalog eller ange värden för egenskaper som används i flera konfigurationer, till exempel Felsökning och Versionsversioner. Mer information om egenskaper finns i MSBuild-egenskaper.

Du kan använda egenskaper för att ändra konfigurationen av bygget utan att behöva ändra projektfilen. Med Condition attributet Property och PropertyGroup kan du ändra värdet för egenskaper.

  • Om du vill definiera en egenskap som är beroende av en annan egenskap anger du Condition attributet i ett Property element:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    
  • Om du vill definiera en grupp med egenskaper som är beroende av en annan egenskap anger du Condition attributet i ett PropertyGroup element:

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

Mer information om MSBuild-villkor finns i Villkor.

Ange egenskaper på kommandoraden

När projektfilen accepterar flera konfigurationer behöver du kunna ändra konfigurationerna när du skapar projektet. MSBuild stöder den här åtgärden genom att du kan ange egenskaper på kommandoraden med växeln -property eller -p .

  • Om du vill ange en projektegenskap på kommandoraden använder du växeln -property (eller -p) med egenskapsnamnet och värdet:

    msbuild file.proj -property:Flavor=Debug
    
  • Om du vill ange mer än en projektegenskap på kommandoraden använder du växeln -property (-p) med varje egenskapsnamn och värde:

    msbuild file.proj -p:Flavor=Debug -p:Platform=x86
    
  • Det finns en genväg för att ange flera egenskaper på kommandoraden. Ange växeln -property (-p) en gång och avgränsa listan med egenskapsnamn och värden med hjälp av semikolonet (;):

    msbuild file.proj -p:Flavor=Debug;Platform=x86;Verbose=True
    

Hantera prioritet mellan miljövariabler och egenskaper

MSBuild bearbetar miljövariabelvärden på samma sätt som den hanterar egenskaper. När bygget påträffar flera värden för en egenskap anger den värdet enligt prioritetsordningen: kommandorad (högsta), projektfil och miljövariabel (lägst).

  • Ett egenskapsvärde som anges på kommandoraden har företräde framför alla värden som angetts för samma egenskap i projektfilen eller miljövariabeln.

  • Ett egenskapsvärde som anges i projektfilen har företräde framför motsvarande värde som definierats i en miljövariabel.

Du kan ändra prioritetsbeteendet med hjälp TreatAsLocalProperty av attributet i en projekttagg. När du listar egenskapsnamn med det här attributet har egenskapsvärdet som anges på kommandoraden inte företräde framför värdet i projektfilen. Ett exempel finns i Ändra prioritet med attributet TreatAsLocalProperty.

Mer information finns i Använda miljövariabler i en version.

Använda egenskapsgrupper för att ändra byggkonfigurationer

I följande exempel visas en projektfil som definierar två egenskapsgrupper för att skapa en felsöknings- eller versionsversion av projektet.

  • Om du vill skapa felsökningsversionen använder du växeln -property (-p) med egenskapsvärdet flavor inställt på debug:

    msbuild consolehwcs1.proj -p:flavor=debug
    
  • Om du vill skapa släppversionen kan du använda växeln -property (-p) med egenskapsvärdet flavor inställt på retail:

    msbuild consolehwcs1.proj -p:flavor=retail
    

Här är projektfilen:

<Project DefaultTargets = "Compile">

    <!-- Set default flavor, if env variable 'Flavor' not set or specified on command line -->
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
    </PropertyGroup>

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

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

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

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

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

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

Ändra prioritet med attributet TreatAsLocalProperty

I följande exempel visas hur du använder attributet TreatAsLocalProperty . Egenskapen Color har värdet Blue i projektfilen och Green på kommandoraden. Med attributinställningen TreatAsLocalProperty="Color" i projekttaggen åsidosätter inte kommandoradsegenskapen (Green) det egenskapsvärde som definierats i projektfilen (Blue).

Om du vill skapa projektet anger du följande kommando:

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

Här är projektfilen:

<Project 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
-->