Kompilacja tych samych plików źródłowych przy użyciu różnych opcji

Podczas kompilowania projektów często kompilujesz te same składniki z różnymi opcjami kompilacji. Możesz na przykład utworzyć kompilację debugowania z informacjami o symbolach lub kompilacją wydania bez informacji o symbolach, ale z włączonymi optymalizacjami. Możesz też utworzyć projekt do uruchomienia na określonej platformie, takiej jak x86 lub x64. We wszystkich tych przypadkach większość opcji kompilacji pozostanie taka sama; tylko kilka opcji jest zmienianych w celu kontrolowania konfiguracji kompilacji. Program MSBuild używa właściwości i warunków do tworzenia różnych konfiguracji kompilacji.

Używanie właściwości do kontrolowania ustawień kompilacji

Element Property definiuje zmienną, do którego odwołuje się kilka razy w pliku projektu, na przykład lokalizację katalogu tymczasowego lub ustawia wartości właściwości używanych w kilku konfiguracjach, takich jak kompilacja debugowania i kompilacja wydania. Aby uzyskać więcej informacji o właściwościach, zobacz Właściwości programu MSBuild.

Właściwości umożliwiają zmianę konfiguracji kompilacji bez konieczności zmiany pliku projektu. Atrybut ConditionProperty elementu i PropertyGroup elementu umożliwia zmianę wartości właściwości. Aby uzyskać więcej informacji na temat warunków programu MSBuild, zobacz Warunki.

Aby ustawić grupę właściwości, która zależy od innej właściwości

  • Użyj atrybutu w elemecie ConditionPropertyGroup podobnym do następującego:

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

Aby zdefiniować właściwość, która zależy od innej właściwości

  • Użyj atrybutu w elemecie ConditionProperty podobnym do następującego:

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

Określanie właściwości w wierszu polecenia

Gdy plik projektu zostanie zapisany w celu zaakceptowania wielu konfiguracji, musisz mieć możliwość zmiany tych konfiguracji za każdym razem, gdy kompilujesz projekt. Program MSBuild umożliwia określenie właściwości w wierszu polecenia przy użyciu przełącznika -property lub -p .

Aby ustawić właściwość projektu w wierszu polecenia

  • Użyj przełącznika -property z właściwością i wartością właściwości. Na przykład:

    msbuild file.proj -property:Flavor=Debug
    

    lub

    Msbuild file.proj -p:Flavor=Debug
    

Aby określić więcej niż jedną właściwość projektu w wierszu polecenia

  • Użyj przełącznika -property lub -p wiele razy z wartościami właściwości i właściwości lub użyj jednego przełącznika -property lub -p i rozdziel wiele właściwości średnikami (;). Na przykład:

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

    lub

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

    Zmienne środowiskowe są również traktowane jako właściwości i są automatycznie uwzględniane przez program MSBuild. Aby uzyskać więcej informacji na temat używania zmiennych środowiskowych, zobacz Instrukcje: używanie zmiennych środowiskowych w kompilacji.

    Wartość właściwości określona w wierszu polecenia ma pierwszeństwo przed dowolną wartością ustawioną dla tej samej właściwości w pliku projektu, a ta wartość w pliku projektu ma pierwszeństwo przed wartością w zmiennej środowiskowej.

    To zachowanie można zmienić przy użyciu atrybutu TreatAsLocalProperty w tagu projektu. W przypadku nazw właściwości wymienionych za pomocą tego atrybutu wartość właściwości określona w wierszu polecenia nie ma pierwszeństwa przed wartością w pliku projektu. Przykład można znaleźć w dalszej części tego tematu.

Przykład 1

Poniższy przykład kodu, projekt "Hello World", zawiera dwie nowe grupy właściwości, których można użyć do utworzenia kompilacji debugowania i kompilacji wydania.

Aby skompilować wersję debugowania tego projektu, wpisz:

msbuild consolehwcs1.proj -p:flavor=debug

Aby skompilować wersję detaliczną tego projektu, wpisz:

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>

Przykład 2

W poniższym przykładzie pokazano, jak używać atrybutu TreatAsLocalProperty . Właściwość Color ma wartość Blue w pliku projektu i Green w wierszu polecenia. W TreatAsLocalProperty="Color" tagu projektu właściwość wiersza polecenia (Green) nie zastępuje właściwości zdefiniowanej w pliku projektu (Blue).

Aby skompilować projekt, wprowadź następujące polecenie:

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