Практическое руководство. Построение одинаковых исходных файлов с различными параметрами
Обновлен: Ноябрь 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 как свойства и подключаются автоматически. Дополнительные сведения об использовании переменных среды см. в разделе Практическое руководство. Использование переменных среды в построении.
Примечание. |
---|
Значение свойства, указанное в командной строке, имеет более высокий приоритет по сравнению с каким-либо значением, заданным для этого свойства в файле проекта, а значение, заданное в файле проекта, имеет более высокий приоритет, чем значение в переменной среды. |
Пример
В приведенном ниже примере показан код проекта "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>