Sdílet prostřednictvím


Vytvoření více konfigurací sestavení pro zdrojové soubory

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á. Změní se jen několik možností pro kontrolu konfigurace sestavení. Pomocí nástroje MSBuild použijete vlastnosti a podmínky k vytvoření různých konfigurací sestavení pro zdrojové soubory.

Použijte vlastnosti pro řízení nastavení sestavení.

Element Property definuje proměnnou, která má více odkazů v souboru projektu. Proměnná může identifikovat umístění dočasného adresáře nebo nastavit hodnoty pro vlastnosti používané v několika konfiguracích, jako jsou buildy Debug a Release. Další informace o vlastnostech naleznete viz MSBuild vlastnosti.

Pomocí vlastností můžete změnit konfiguraci sestavení, aniž byste museli měnit soubor projektu. Atribut Condition elementů PropertyPropertyGroup umožňuje změnit hodnotu vlastností.

  • Chcete-li definovat vlastnost, která závisí na jiné vlastnosti, nastavte Condition atribut v elementu Property :

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    
  • Chcete-li definovat skupinu vlastností, které závisí na jiné vlastnosti, nastavte Condition atribut v elementu PropertyGroup :

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

Další informace o podmínkách nástroje MSBuild naleznete v tématu Podmínky.

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

Když soubor projektu přijímá více konfigurací, potřebujete možnost měnit konfigurace pokaždé, když projekt sestavíte. Nástroj MSBuild tuto akci podporuje tím, že umožňuje zadat vlastnosti na příkazovém řádku pomocí -property přepínače nebo -p přepínače.

  • Pokud chcete nastavit vlastnost projektu na příkazovém řádku, použijte -property přepínač (nebo -p) s názvem a hodnotou vlastnosti:

    msbuild file.proj -property:Flavor=Debug
    
  • Pokud chcete zadat více než jednu vlastnost projektu na příkazovém řádku, použijte -property přepínač (-p) s názvem a hodnotou každé vlastnosti:

    msbuild file.proj -p:Flavor=Debug -p:Platform=x86
    
  • Na příkazovém řádku je zkratka pro specifikaci více vlastností. -property Zadejte přepínač (-p) jednou a oddělte seznam názvů a hodnot vlastností středníkem (;):

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

Zpracování priority napříč proměnnými a vlastnostmi prostředí

NÁSTROJ MSBuild zpracovává hodnoty proměnných prostředí stejným způsobem, jakým zpracovává vlastnosti. Když sestavení pro vlastnost narazí na více hodnot, nastaví hodnotu podle pořadí priority: příkazový řádek (nejvyšší), soubor projektu a proměnná prostředí (nejnižší).

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

  • Hodnota vlastnosti nastavená v souboru projektu má přednost před odpovídající hodnotou definovanou v proměnné prostředí.

Chování priority můžete změnit pomocí atributu TreatAsLocalProperty ve značce projektu. Při výpisu názvů vlastností s tímto atributem nemá hodnota vlastnosti zadaná na příkazovém řádku přednost před hodnotou v souboru projektu. Viz příklad v tématu Změna priority s atributem TreatAsLocalProperty.

Další informace najdete v tématu Použití proměnných prostředí v sestavení.

Změna konfigurací sestavení pomocí skupin vlastností

Následující příklad ukazuje soubor projektu, který definuje dvě vlastnostní skupiny pro sestavení verze Debug nebo Release projektu.

  • Chcete-li sestavit verzi pro ladění, použijte přepínač -property (-p) s hodnotou vlastnosti flavor nastavenou na debug.

    msbuild consolehwcs1.proj -p:flavor=debug
    
  • K sestavení verze pro vydání použijte přepínač -property (-p) s hodnotou vlastnosti flavor nastavenou na retail:

    msbuild consolehwcs1.proj -p:flavor=retail
    

Tady je soubor projektu:

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

Změna priority atributem TreatAsLocalProperty

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. TreatAsLocalProperty="Color" Při nastavení atributu ve značce projektu vlastnost příkazového řádku (Green) nepřepíše hodnotu vlastnosti definovanou v souboru projektu (Blue).

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

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

Tady je soubor projektu:

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