Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O MSBuild dá suporte a um conjunto específico de condições que podem ser aplicadas sempre que um atributo Condition
é permitido; consulte elementos com suporte. A tabela a seguir explica essas condições.
O elemento Condition
é uma única cadeia de caracteres e, portanto, todas as cadeias de caracteres usadas na expressão, incluindo valores de propriedade, precisam ser colocadas entre aspas simples. Espaços entre operadores são permitidos e geralmente usados para legibilidade, mas não são necessários.
Para usar os operadores booliano And
e Or
, especifique operandos dentro do valor da cadeia de caracteres do elemento Condition
, como no exemplo a seguir:
Condition="'$(Configuration)' == 'Debug' And '$(MSBuildProjectExtension)' == '.csproj'"
Você pode encadear os operadores boolianos. O operador And
tem precedência maior do que Or
, mas para maior clareza, recomendamos que você use parênteses ao usar vários operadores boolianos para tornar a ordem de avaliação explícita. Se você não fizer isso, o MSBuild fornecerá MSB4130 de aviso.
Você pode usar métodos de cadeia de caracteres em condições, conforme mostrado no exemplo a seguir, no qual a função TrimEnd() é usada para comparar apenas a parte relevante da cadeia de caracteres, para diferenciar entre estruturas de destino do .NET Framework e do .NET Core.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;net48;netstandard2.1;netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
<!-- Properties for .NET Framework -->
</PropertyGroup>
</Project>
Nos arquivos de projeto do MSBuild, não há nenhum tipo booliano verdadeiro. Os dados boolianos são representados em propriedades que podem estar vazias ou definidas como qualquer valor. Portanto, '$(Prop)' == 'true'
significa "se o Prop for true
", mas '$(Prop)' != 'false'
significa "se o Prop for true
ou desafinado ou definido como outra coisa".
A lógica booliana é avaliada apenas no contexto de condições, portanto, as configurações de propriedade, como <Prop2>'$(Prop1)' == 'true'</Prop>
, são representadas como uma cadeia de caracteres (após expansão variável), não avaliadas como valores boolianos.
O MSBuild implementa algumas regras de processamento especiais para facilitar o trabalho com propriedades de cadeia de caracteres que são usadas como valores boolianos. Literais boolianos são aceitos, portanto, Condition="true"
e Condition="false"
funcionam conforme o esperado. O MSBuild também inclui regras especiais para dar suporte ao operador de negação booliano. Portanto, se $(Prop)
for 'true', !$(Prop)
se expandirá para !true
e esse valor será comparado igual a false
, como seria de esperar.
Comparando versões
Os operadores relacionais <
, >
, <=
e >=
dão suporte a versões como analisadas por System.Version, para que você possa comparar versões que têm quatro partes numéricas entre si. Por exemplo, '1.2.3.4' < '1.10.0.0'
é true
.
Cuidado
System.Version
comparações podem produzir resultados surpreendentes quando uma ou ambas as versões não especificam todas as quatro partes. Por exemplo, a versão 1.1 é mais antiga que a versão 1.1.0.
O MSBuild fornece funções de propriedade para comparar versões que têm um conjunto diferente de regras compatíveis com o controle de versão semântico (semver).
Expansões em condições
Dependendo da posição no arquivo de projeto, você pode usar expansões para propriedades ($), listas de itens (@) e metadados de item (%). As expansões dependem de como o MSBuild processa arquivos de projeto.
Propriedades
Uma condição que contém uma expressão como $(SomeProperty)
é avaliada e convertida no valor da propriedade. Se a condição estiver fora de um destino, a expressão será avaliada durante a avaliação do arquivo de projeto. O valor da propriedade depende da posição no arquivo de projeto depois de expandir todas as importações. Se a condição estiver em um destino, ela será avaliada quando o destino for executado e o valor será afetado por quaisquer alterações que ocorram durante a execução do build.
Uma propriedade que não é definida no ponto no arquivo de projeto expandido em que a expressão de condição ocorre é avaliada como uma cadeia de caracteres vazia, sem nenhum erro de diagnóstico ou aviso.
Listas de itens
Uma condição que contém uma @-expression como @(SomeItems)
é expandida em grupos de itens no nível superior e em destinos.
Os itens podem depender de qualquer propriedade e podem depender de itens que já estão definidos em sequência.
O motivo é que o MSBuild processa arquivos de projeto em várias passagens. A aprovação de avaliação do item ocorre após a avaliação da propriedade inicial e a aprovação de expansão de importação. Portanto, as @-expressions são permitidas em qualquer condição que seja avaliada depois que os itens começarem a ser definidos. Ou seja, em itens, grupos de itens e em destinos.
Metadados
Uma condição que contém uma expressão de metadados, como %(ItemMetadata)
, é expandida nos mesmos contextos que listas de itens, ou seja, em grupos de itens no nível superior e em destinos. No entanto, a expansão pode ter um comportamento diferente em um grupo de itens, dependendo se o grupo de itens está fora de um destino ou dentro de um destino. Além disso, das várias formas de expressões de metadados, %(ItemName.MetadataName)
, %(JustTheMetadataName)
e @(ItemName->'%(MetadataName)')
, somente a transformação do item (a última) é permitida fora de um destino. O valor de uma expressão de %em um destino é avaliado em tempo de execução e depende de alterações de estado durante a execução de destino. A execução do destino e do valor de qualquer %-expressões contidas nele também depende do envio em lote do destino e também pode disparar o envio em lote; consulte de envio em lote do MSBuild.
Elementos com suporte
Os seguintes elementos dão suporte ao atributo Condition
:
- Importação
- ImportGroup
- Item
- ItemDefinitionGroup
- ItemGroup
- ItemMetadata
- OnError
- Saída
- Propriedade
- PropertyGroup
- Alvo
- Tarefa
- UsingTask
- Quando
Consulte também
- de referência do MSBuild
- construções condicionais
- Passo a passo: criando um arquivo de projeto do MSBuild do zero