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


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

Обновлен: Ноябрь 2007

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

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

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

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

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

  • Используйте атрибут Condtion в элементе 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 как свойства и подключаются автоматически. Дополнительные сведения об использовании переменных среды см. в разделе Практическое руководство. Использование переменных среды в построении.

ms171481.alert_note(ru-ru,VS.90).gifПримечание.

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

Пример

В приведенном ниже примере показан код проекта "Hello World", содержащий две новых группы свойств, которые можно использовать для создания отладочного построенпя (Debug) и построения для выпуска (Release).

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

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>

См. также

Основные понятия

MSBuild

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

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

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