Udostępnij przez


Tworzenie wielu konfiguracji kompilacji dla plików źródłowych

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. W programie MSBuild użyjesz właściwości i warunków, aby utworzyć różne konfiguracje kompilacji dla plików źródłowych.

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

Element Property definiuje zmienną, która zawiera wiele odwołań w pliku projektu. Zmienna może identyfikować lokalizację katalogu tymczasowego lub ustawiać wartości właściwości używanych w kilku konfiguracjach, takich jak buildy Debug i Release. 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 Condition elementów Property i PropertyGroup umożliwia zmianę wartości właściwości.

  • Aby zdefiniować właściwość, która zależy od innej właściwości, ustaw Condition atrybut w elemecie Property :

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    
  • Aby zdefiniować grupę właściwości, która zależy od innej właściwości, ustaw Condition atrybut w elemecie PropertyGroup :

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

Aby uzyskać więcej informacji na temat warunków programu MSBuild, zobacz Warunki.

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

Gdy plik projektu akceptuje wiele konfiguracji, musisz mieć możliwość zmiany konfiguracji za każdym razem, gdy kompilujesz projekt. Program MSBuild obsługuje tę akcję, umożliwiając określanie właściwości w wierszu polecenia za pomocą przełącznika -property lub -p .

  • Aby ustawić właściwość projektu w wierszu polecenia, użyj przełącznika -property (lub -p) z nazwą właściwości i wartością:

    msbuild file.proj -property:Flavor=Debug
    
  • Aby określić więcej niż jedną właściwość projektu w wierszu polecenia, użyj przełącznika -property (-p) z każdą nazwą i wartością właściwości:

    msbuild file.proj -p:Flavor=Debug -p:Platform=x86
    
  • Istnieje skrót do określania wielu właściwości w wierszu polecenia. -property Wprowadź przełącznik (-p) raz i rozdziel listę nazw właściwości i wartości przy użyciu średnika (;):

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

Zarządzanie pierwszeństwem między zmiennymi środowiskowymi a parametrami

Program MSBuild przetwarza wartości zmiennych środowiskowych w taki sam sposób, jak obsługuje właściwości. Gdy kompilacja napotka wiele wartości dla właściwości, ustawia wartość zgodnie z kolejnością pierwszeństwa: wiersz polecenia (najwyższy), plik projektu i zmienną środowiskową (najniższa).

  • 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 lub zmiennej środowiskowej.

  • Wartość właściwości ustawiona w pliku projektu ma pierwszeństwo przed odpowiednią wartością zdefiniowaną w zmiennej środowiskowej.

Zachowanie pierwszeństwa można zmienić przy użyciu atrybutu TreatAsLocalProperty w tagu projektu. Gdy wyświetlasz listę nazw właściwości z tym atrybutem, wartość właściwości określona w wierszu polecenia nie ma pierwszeństwa przed wartością w pliku projektu. Aby zapoznać się z przykładem, zobacz Change precedence with the TreatAsLocalProperty attribute (Zmiana pierwszeństwa za pomocą atrybutu TreatAsLocalProperty).

Aby uzyskać więcej informacji, zobacz Używanie zmiennych środowiskowych w kompilacji.

Zmienianie konfiguracji kompilacji przy użyciu grup właściwości

W poniższym przykładzie pokazano plik projektu, który definiuje dwie grupy właściwości w celu utworzenia wersji debugowania lub wydania projektu.

  • Aby skompilować wersję debugowania, użyj przełącznika -property (-p) z wartością właściwości ustawioną flavor na debug:

    msbuild consolehwcs1.proj -p:flavor=debug
    
  • Aby skompilować wersję wydania, użyj przełącznika -property (-p) z wartością właściwości ustawioną flavor na retail:

    msbuild consolehwcs1.proj -p:flavor=retail
    

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

Zmień pierwszeństwo za pomocą atrybutu TreatAsLocalProperty

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. Ustawienie atrybutu TreatAsLocalProperty="Color" w tagu projektu powoduje, że właściwość wiersza polecenia (Green) nie zastępuje wartości 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

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