Como: criar os mesmos arquivos de origem com diversas opções
Quando você cria projetos, você compila com freqüência os mesmos componentes com diferentes opções de compilação.Por exemplo, você pode criar uma construção de depuração com informações do símbolo ou uma compilação de versão sem informações do símbolo mas com as otimizações habilitadas.Ou você pode compilar um projeto para executar em uma plataforma específica, como x ou x64.Em todos esses casos, a maioria das opções de compilação permanecem o mesmo; apenas algumas opções são alteradas controlar a configuração de compilação.Com MSBuild, use as propriedades e para criar as diferentes configurações de compilação.
Usando propriedades para modificar projetos
O elemento de Property define uma variável que é referenciado várias vezes em um arquivo de projeto, como o local de um diretório temporário, ou para definir os valores para as propriedades que são usadas em várias configurações, como uma construção de depuração e uma compilação de versão.Para obter mais informações sobre propriedades, consulte Propriedades do MSBuild.
Você pode usar propriedades para alterar a configuração de sua compilação sem ter que alterar o arquivo de projeto.O atributo de Condition do elemento de Property e do elemento de PropertyGroup permite que você altere o valor das propriedades.Para obter mais informações sobre as condições de MSBuild , consulte Condições do MSBuild.
Para definir um grupo de propriedades com base em outra propriedade
Use um atributo de Condition em um elemento de PropertyGroup semelhante ao seguinte:
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
Para definir uma propriedade com base em outra propriedade
Use um atributo de Condition em um elemento de Property semelhante ao seguinte:
<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
Especificando propriedades na linha de comando
Uma vez que o arquivo de projeto é gravado em para aceitar várias configurações, você precisa ter capacidade de mudar essas configurações sempre que você criar seu projeto.MSBuild fornece essa capacidade permitindo que as propriedades são especificadas na linha de comando usando a opção de /property ou de /p .
Para definir uma propriedade do projeto na linha de comando
Use a opção de /property com a propriedade e o valor da propriedade.Por exemplo:
msbuild file.proj /property:Flavor=Debug
- ou -
Msbuild file.proj /p:Flavor=Debug
Para especificar mais de uma propriedade do projeto na linha de comando
Use a opção de /property ou de /p várias vezes com a propriedade e valores de propriedade, ou use um /property ou alterne de /p e separe vários propriedades com ponto-e-vírgula (;).Por exemplo:
msbuild file.proj /p:Flavor=Debug;Platform=x86
- ou -
msbuild file.proj /p:Flavor=Debug /p:Platform=x86
Variáveis de ambiente também são tratados como propriedades e inseridos automaticamente por MSBuild.Para obter mais informações sobre como usar variáveis de ambiente, consulte Como: usar variáveis de ambiente em uma compilação.
O valor da propriedade que é especificado na linha de comando prevalece sobre qualquer valor que são definidos para a mesma propriedade no arquivo de projeto, e que avalia no arquivo de projeto tem precedência sobre o valor em uma variável de ambiente.
Você pode modificar esse comportamento usando o atributo de TreatAsLocalProperty em uma marca do projeto.Para os nomes de propriedades que são listados com o atributo, o valor da propriedade que é especificado na linha de comando não tem precedência sobre o valor no arquivo de projeto.Você pode localizar um exemplo mais adiante em este tópico.
Exemplo
O exemplo de código, “hello world” do projeto, contém dois novos grupos de propriedades que podem ser usados para criar uma construção de depuração e uma compilação de versão.
Para criar a versão de depuração do projeto, digite:
msbuild consolehwcs1.proj /p:flavor=debug
Para criar a versão comercial de esse projeto, digite:
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>
O exemplo a seguir ilustra como usar o atributo de TreatAsLocalProperty .A propriedade de Color tem um valor de Blue no arquivo de projeto e de Green na linha de comando.Com TreatAsLocalProperty="Color" na marca de projeto, a propriedade de linha de comando (Green) não substitui a propriedade que está definida no arquivo de projeto (Blue).
Para compilar o projeto, digite o seguinte comando:
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
-->