Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При сборке проектов часто компилируется одни и те же компоненты с различными параметрами сборки. Например, можно создать отладочную сборку с информацией о символах или финальную сборку без информации о символах, но с включенными оптимизациями. Вы также можете создать проект для запуска на определенной платформе, например x86 или x64. Во всех этих случаях большинство вариантов сборки остаются одинаковыми. Для управления конфигурацией сборки изменяются только несколько вариантов. При использовании MSBuild вы используете свойства и условия для создания различных конфигураций сборки для исходных файлов.
Использование свойств для управления параметрами сборки
Элемент Property определяет переменную с несколькими ссылками в файле проекта. Переменная может определить расположение временного каталога или задать значения параметров, используемых в нескольких конфигурациях, таких как Debug и Release сборки. Дополнительные сведения о свойствах см. в разделе свойства MSBuild.
Свойства можно использовать для изменения конфигурации сборки, не изменяя файл проекта. Атрибут Condition элементов Property и PropertyGroup позволяет изменить значения их свойств.
Чтобы определить свойство, которое зависит от другого свойства, задайте
Conditionатрибут в элементеProperty:<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>Чтобы определить группу свойств, зависящих от другого свойства, задайте
Conditionатрибут в элементеPropertyGroup:<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
Дополнительные сведения об условиях MSBuild см. в разделе "Условия".
Указание свойств в командной строке
Если файл проекта принимает несколько конфигураций, вам потребуется возможность изменять конфигурации всякий раз при сборке проекта. MSBuild поддерживает это действие, позволяя указать свойства в командной строке с ключом -property или -p.
Чтобы задать свойство проекта в командной строке, используйте
-propertyпереключатель (или-p) с именем и значением свойства:msbuild file.proj -property:Flavor=DebugЧтобы указать несколько свойств проекта в командной строке, используйте
-propertyключ (-p) для каждого имени и значения свойства.msbuild file.proj -p:Flavor=Debug -p:Platform=x86Существует упрощение для указания нескольких свойств в командной строке.
-propertyВведите переключатель (-p) один раз и разделите список имен свойств и значений точкой с запятой (;):msbuild file.proj -p:Flavor=Debug;Platform=x86;Verbose=True
Обработка приоритета между переменными и свойствами среды
MSBuild обрабатывает значения переменной среды так же, как и свойства. Когда сборка встречает несколько значений для свойства, она задает значение в соответствии с порядком приоритета: командная строка (наивысший), файл проекта и переменная среды (наименьшая).
Значение свойства, указанное в командной строке, имеет приоритет над любым значением, заданным для того же свойства в файле проекта или переменной среды.
Значение свойства, заданное в файле проекта, имеет приоритет над соответствующим значением, определенным в переменной среды.
Вы можете изменить поведение приоритета с помощью атрибута TreatAsLocalProperty в теге проекта. При перечислении имен свойств с этим атрибутом значение свойства, указанное в командной строке, не имеет приоритета над значением в файле проекта. Пример см. в разделе "Изменение приоритета" с атрибутом TreatAsLocalProperty.
Дополнительные сведения см. в разделе "Использование переменных среды в сборке".
Изменение конфигураций сборки с помощью групп свойств
В следующем примере показан файл проекта, который определяет две группы свойств для создания версии отладки или выпуска проекта.
Чтобы создать отладочную версию, используйте переключатель
-property(-p) со значением свойстваflavor, установленным наdebug.msbuild consolehwcs1.proj -p:flavor=debugЧтобы собрать релизную версию, используйте переключатель
-property(-p) со значением свойства, установленным вflavor:msbuild consolehwcs1.proj -p:flavor=retail
Ниже приведен файл проекта:
<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>
Изменение приоритета атрибута TreatAsLocalProperty
В следующем примере показано, как использовать TreatAsLocalProperty атрибут. Свойство Color имеет значение Blue в файле проекта и Green в командной строке. Для параметра атрибута TreatAsLocalProperty="Color" в теге проекта свойство командной строки (Green) не переопределяет значение свойства, заданное в файле проекта (Blue).
Чтобы создать проект, введите следующую команду:
msbuild colortest.proj -t:go -property:Color=Green
Ниже приведен файл проекта:
<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
-->