Поделиться через


Практическое руководство. Построение одинаковых исходных файлов с различными параметрами

При создании проектов очень часто компилируете одинаковые компоненты с различными параметрами построения.Например, можно создать отладочную сборку с символьными данными или выпускаемое построение без символьных данных, но с поддержкой оптимизации.Можно также создать проект для выполнения на определенной платформе, например x86 или x64.Во всех этих случаях большая часть параметров построения остается одинаковой; только несколько параметров изменяется, определяя конфигурацию построения.В MSBuild для создания различных конфигураций построения используются свойства и условия.

Использование свойств для изменения проектов

Элемент Property определяет переменную, которая несколько раз указывается в файле проекта в качестве ссылки, например расположение временного каталога, или задает значения для свойств, используемых в нескольких конфигурациях, например в отладочном построении (Debug) и построении для выпуска (Release).Дополнительные сведения о свойствах см. в разделе Свойства MSBuild.

С помощью свойств можно изменить конфигурацию построения, не изменяя файл проекта.Атрибут Condition элемента Property и элемент PropertyGroup позволяют изменить значение свойств.Дополнительные сведения об условиях MSBuild см. в разделе Условия MSBuild.

Задание группы свойств на основе другого свойства

  • Используйте атрибут Condition в элементе PropertyGroup следующим образом:

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

Определение свойства на основе другого свойства

  • Используйте атрибут Condition в элементе Property следующим образом:

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

Задание свойств в командной строке

Если файл проекта поддерживает несколько конфигураций, необходимо иметь возможность изменения этих конфигураций при построении проекта.MSBuild предоставляет такую возможность, позволяя указывать свойства в командной строке с использованием ключа /property или /p.

Задание свойства проекта в командной строке

  • Используйте ключ /property, указывая имя и значение свойства.Например:

    msbuild file.proj /property:Flavor=Debug
    

    - или -

    Msbuild file.proj /p:Flavor=Debug
    

Задание нескольких свойств проекта в командной строке

  • Используйте ключ /property или /p несколько раз, указывая имена и значения свойств, либо используйте один ключ /property или /p с несколькими свойствами, отделяя их точкой с запятой (;).Например:

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

    или

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

Переменные среды также воспринимаются в MSBuild как свойства и подключаются автоматически.Дополнительные сведения об использовании переменных среды см. в разделе Практическое руководство. Использование переменных среды в построении.

Значение свойства, указанное в командной строке, имеет более высокий приоритет по сравнению с каким-либо значением, заданным для этого свойства в файле проекта, а значение, заданное в файле проекта, имеет более высокий приоритет, чем значение в переменной среды.

Можно изменить эту функциональности с помощью атрибута TreatAsLocalProperty в теге проекта.Для имен свойств, перечислены с этим атрибутом, значение свойства, которое указано в командной строке не имеет приоритет над значением в файле проекта.Можно найти пример далее в этом разделе.

Пример

В следующем примере кода "hello world", проект содержит 2 новых группы свойств, которые можно использовать для создания построение и отладка построения выпуска.

Чтобы создать отладочную версию проекта, введите:

msbuild consolehwcs1.proj /p:flavor=debug

Чтобы создать версию проекта для розничной продажи, введите:

msbuild consolehwcs1.proj /p:flavor=retail

<Project DefaultTargets = "Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

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

В следующем примере показано, как использовать атрибут TreatAsLocalProperty.Свойство Color имеет значение Blue в файле проекта и Green в командной строке.С TreatAsLocalProperty="Color" в теге проекта, свойство командной строки (Green) не переопределяет свойство, определенное в файле проекта (Blue).

Для построения проекта введите следующую команду:

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

<Project xmlns="https://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
-->

См. также

Ссылки

Элемент Project (MSBuild)

Другие ресурсы

MSBuild

Основные возможности MSBuild

Справочные сведения о MSBuild