Сборка одинаковых исходных файлов с различными параметрами
При сборке проектов вы часто компилируете одни и те же компоненты с разными параметрами сборки. Например, вы можете создать отладочную сборку с символьной информацией или сборку выпуска без такой информации, но с включенными оптимизациями. Можно также создать проект для выполнения на определенной платформе, например x86 или x64. Во всех этих случаях основная часть параметров сборки остается без изменений, а управление конфигурацией сборки осуществляется с помощью всего нескольких параметров. MSBuild позволяет использовать свойства и условия для создания различных конфигураций сборки.
Использование свойств для управления параметрами сборки
Элемент Property
определяет переменную, на которую имеется несколько ссылок в файле проекта, например, расположение временного каталога, или значения для свойств, используемых в нескольких конфигурациях, таких как отладочная сборка и сборка выпуска. Дополнительные сведения о свойствах см. в разделе Свойства MSBuild.
Свойства можно использовать для изменения конфигурации сборки без редактирования файла проекта. Атрибут Condition
элемента Property
и элемент PropertyGroup
позволяют изменять значения свойств. Дополнительные сведения об условиях 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
or
Msbuild file.proj -p:Flavor=Debug
Задание нескольких свойств проекта в командной строке
Используйте параметр -property или -p с указанием свойств и их значений либо используйте один параметр -property или -p, указав несколько свойств через точку с запятой (;). Например:
msbuild file.proj -p:Flavor=Debug;Platform=x86
or
msbuild file.proj -p:Flavor=Debug -p:Platform=x86
Переменные среды также обрабатываются как свойства и автоматически внедряются MSBuild. Дополнительные сведения об использовании переменных среды см. в разделе Практическое руководство. Использование переменных среды в сборке.
Значение свойства, которое указано в командной строке, имеет приоритет над любым значением для того же свойства, заданным в файле проекта, а значение в файле проекта имеет приоритет над значением в переменной среды.
Это поведение можно изменить с помощью атрибута
TreatAsLocalProperty
в теге проекта. Для имен свойств, которые указаны с использованием этого атрибута, значение свойства, заданное в командной строке, не имеет приоритет над значением в файле проекта. См. пример далее в этом разделе.
Пример 1
В следующем примере кода проект Hello World содержит две новых группы свойств, которые можно использовать для создания отладочной сборки и сборки выпуска.
Чтобы создать отладочную версию проекта, введите:
msbuild consolehwcs1.proj -p:flavor=debug
Чтобы создать розничную версию проекта, введите:
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>
Пример 2
В следующем примере показано использование атрибута TreatAsLocalProperty
. Свойство Color
имеет значение Blue
в файле проекта и Green
в командной строке. Так как в теге проекта указано TreatAsLocalProperty="Color"
, свойство командной строки (Green
) не переопределяется свойство, заданное в файле проекта (Blue
).
Чтобы выполнить сборку проекта, введите следующую команду:
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
-->
Связанный контент
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по