Sestavení stejných zdrojových souborů s různými možnostmi

Při sestavování projektů často kompilujete stejné komponenty s různými možnostmi sestavení. Můžete například vytvořit ladicí build s informacemi o symbolech nebo sestavení verze bez informací o symbolech, ale s povolenými optimalizacemi. Nebo můžete vytvořit projekt pro spuštění na konkrétní platformě, například x86 nebo x64. Ve všech těchto případech zůstává většina možností sestavení stejná; Ke kontrole konfigurace sestavení se změní jenom několik možností. Pomocí nástroje MSBuild použijete vlastnosti a podmínky k vytvoření různých konfigurací sestavení.

Řízení nastavení sestavení pomocí vlastností

Element Property definuje proměnnou, na kterou se odkazuje několikrát v souboru projektu, například umístění dočasného adresáře, nebo pro nastavení hodnot vlastností, které se používají v několika konfiguracích, jako je sestavení ladění a sestavení vydané verze. Další informace o vlastnostech naleznete v tématu MSBuild vlastnosti.

Pomocí vlastností můžete změnit konfiguraci sestavení, aniž byste museli měnit soubor projektu. Atribut Condition elementu Property a PropertyGroup elementu umožňuje změnit hodnotu vlastností. Další informace o podmínkách nástroje MSBuild naleznete v tématu Podmínky.

Nastavení skupiny vlastností, které závisí na jiné vlastnosti

  • Condition V elementu PropertyGroup použijte atribut podobný následujícímu:

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

Definování vlastnosti, která závisí na jiné vlastnosti

  • Condition V elementu Property použijte atribut podobný následujícímu:

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

Zadání vlastností na příkazovém řádku

Jakmile se soubor projektu zapíše tak, aby přijímal více konfigurací, musíte mít možnost tyto konfigurace kdykoli změnit. NÁSTROJ MSBuild tuto možnost umožňuje zadat vlastnosti na příkazovém řádku pomocí přepínače -property nebo -p .

Nastavení vlastnosti projektu na příkazovém řádku

  • Použijte přepínač -property s vlastností a hodnotou vlastnosti. Příklad:

    msbuild file.proj -property:Flavor=Debug
    

    nebo

    Msbuild file.proj -p:Flavor=Debug
    

Určení více než jedné vlastnosti projektu na příkazovém řádku

  • U vlastností a hodnot vlastností použijte přepínač -property nebo -p vícekrát nebo použijte jeden přepínač -property nebo -p a oddělte více vlastností středníky (;). Příklad:

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

    nebo

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

    Proměnné prostředí jsou také považovány za vlastnosti a jsou automaticky začleněny nástrojem MSBuild. Další informace o používání proměnných prostředí najdete v tématu Postupy: Použití proměnných prostředí v sestavení.

    Hodnota vlastnosti zadaná na příkazovém řádku má přednost před libovolnou hodnotou nastavenou pro stejnou vlastnost v souboru projektu a tato hodnota v souboru projektu má přednost před hodnotou v proměnné prostředí.

    Toto chování můžete změnit pomocí atributu TreatAsLocalProperty ve značce projektu. U názvů vlastností uvedených s tímto atributem nemá hodnota vlastnosti zadaná na příkazovém řádku přednost před hodnotou v souboru projektu. Příklad najdete později v tomto tématu.

Příklad 1

Následující příklad kódu, projekt "Hello World", obsahuje dvě nové skupiny vlastností, které lze použít k vytvoření sestavení Ladění a vydání sestavení.

Pokud chcete sestavit ladicí verzi tohoto projektu, zadejte:

msbuild consolehwcs1.proj -p:flavor=debug

Pokud chcete sestavit prodejní verzi tohoto projektu, zadejte:

msbuild consolehwcs1.proj -p:flavor=retail
<Project DefaultTargets = "Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Sets the default flavor if 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>

Příklad 2

Následující příklad ukazuje, jak použít TreatAsLocalProperty atribut. Vlastnost Color má hodnotu Blue v souboru projektu a Green v příkazovém řádku. Vlastnost TreatAsLocalProperty="Color" příkazového řádku (Green) ve značce projektu nepřepíše vlastnost definovanou v souboru projektu (Blue).

Pokud chcete projekt sestavit, zadejte následující příkaz:

msbuild colortest.proj -t:go -property:Color=Green
<Project xmlns="http://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
-->