Compartilhar via


Definições de item

MSBuild 2.0 permite a declaração estática de itens nos arquivos de projeto por meio de Elemento ItemGroup (MSBuild) e Elemento PropertyGroup (MSBuild). No entanto, metadados podem ser adicionado somente no nível do item, mesmo se os metadados são idênticos para todos os itens.MSBuild 3.5 apresenta um elemento de projeto chamado ItemDefinitionGroup que resolve essa limitação.ItemDefinitionGroup permite que você defina um conjunto de definições de item, que são valores de metadados que são aplicados a todos os itens no projeto, por padrão.

O elemento ItemDefinitionGroup aparece imediatamente depois do elemento Project do arquivo de projeto.Definições de item fornecem as seguintes funcionalidades:

  • Você pode definir metadados padrão global para os itens fora de um destino.Ou seja, os mesmos metadados se aplica a todos os itens do tipo especificado.

  • Tipos de item podem ter várias definições.Quando as especificações de metadados adicionais são adicionadas para o tipo, a especificação do última tem precedência.(sistema autônomo metadados segue a mesma ordem de importação de propriedades a seguir.)

  • Os metadados podem ser aditivas.Por exemplo, valores CDefines são acumulados condicionalmente, dependendo da sobre as propriedades que estão sendo definidas.Por exemplo, MT;STD_CALL;DEBUG;UNICODE.

  • Os metadados podem ser removidos.

  • Condições podem ser usadas para controlar a inclusão de metadados.

Valores de metadados padrão do item

Metadados de item é definido em um ItemDefinitionGroup são apenas uma declaração de metadados padrão.Os metadados não se aplica a menos que você definir um item que usa um ItemGroup para conter os valores de metadados.

Observação:

Em muitos da Exemplos neste tópico , um Elemento ItemDefinitionGroup é mostrado, mas seu definição de ItemGroup correspondente é Se omitido para clareza .

Metadados explicitamente definidos em um ItemGroup tem precedência sobre metadados no ItemDefinitionGroup.Metadados em ItemDefinitionGroup é aplicado somente para metadados indefinido em uma ItemGroup.Por exemplo:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <n>n1</n>
    </i>      
</ItemDefinitionGroup>
<ItemGroup>
    <i Include="a">
        <o>o1</o>
        <n>n2</n>
    </i>
</ItemGroup>

Neste exemplo, os metadados padrão "m" é aplicado ao item "i" porque "m" de metadados não está definido explicitamente por item "i".No entanto, metadados padrão "n" não é aplicado ao item "i" porque metadados "n" já está definido por item "i".

Observação:

X ML Nomes de elemento e parâmetro são caso - confidenciais.Metadados de item e Item / Propriedade nomes não diferenciam maiúsculas - confidenciais.Portanto, Item ItemDefinitionGroup s que têm name s que diferem apenas Por Caso deve ser tratado sistema autônomo mesmo ItemGroup.

Fontes de valor

sistema autônomo valores de metadados é definido em um ItemDefinitionGroup podem vir de várias fontes diferentes, da seguinte maneira:

  • Propriedade PropertyGroup

  • Item de um ItemDefinitionGroup

  • Transformação de item em um Item ItemDefinitionGroup

  • Variável de ambiente

  • Propriedade global (a partir da linha de comando MSBuild.exe)

  • Propriedade reservada

  • Metadados bem conhecidos em um item de um ItemDefinitionGroup

  • Seção CDATA <! [CDATA [nada aqui não é analisado]] >

Observação:

Metadados de item de um ItemGroup não é útil em uma declaração de metadados ItemDefinitionGroup porque ItemDefinitionGroup elementos são processados antes ItemGroup elementos.

Várias definições e aditivo

Quando você adicionar definições ou usa vários ItemDefinitionGroups, lembre-se do seguinte:

  • Especificação de metadados adicionais ao tipo.

  • A especificação do última tem precedência.

Quando você tem vários ItemDefinitionGroups, cada especificação subseqüente adiciona seus metadados à definição de anterior.Por exemplo:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <n>n1</n>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <o>o1</o>
    </i>
</ItemDefinitionGroup>  

Neste exemplo, os metadados "o" é adicionado à "m" e "n".

Além disso, valores de metadados definidos anteriormente também podem ser adicionados.Por exemplo:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m>%(m);m2</m>
    </i>
</ItemDefinitionGroup>  

Neste exemplo, o valor definido anteriormente para metadados "m" (m1) é adicionado ao novo valor (m2), para que seja o valor final "m1, m2".

Observação:

Isso também pode ocorrer em ItemDefinitionGroup mesmo.

Quando você substitui os metadados definido anteriormente, a especificação do última tem precedência.No exemplo a seguir, o valor final do metadados "m" vai de "m1" a "m1a".

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m>m1a</m>
    </i>
</ItemDefinitionGroup>  

Usando condições em uma ItemDefinitionGroup

Você pode usar condições em uma ItemDefinitionGroup para controlar a inclusão de metadados.Por exemplo:

<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>

Nesse caso, os metadados padrão "m1" item "i" são incluídos somente se o valor da propriedade "Configuração" for "depurar".

Observação:

Somente referências de metadados local são suportadas no condições.

Referências aos metadados definidos em um ItemDefinitionGroup anterior são locais para o item, não o agrupar de definições.Isto é, o escopo das referências são específicas de itens.Por exemplo:

<ItemDefinitionGroup>
    <test>
        <yes>1</yes>
    </test>
    <i>
        <m Condition="'%(test.yes)'=='1'">m1</m>
    </i>
</ItemDefinitionGroup>    

Neste exemplo, o item "i" faz referência a item "teste" na condição.

Substituindo e exclusão de metadados

Metadados definido em um elemento ItemDefinitionGroup podem ser substituído em um elemento ItemDefinitionGroup posterior por configuração o valor de metadados em branco.Você também efetivamente pode excluir um item de metadados, defini-la como um valor vazio.Por exemplo:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m></m>
    </i>
  </ItemDefinitionGroup>  

O item "i" ainda contém metadados "m", mas seu valor agora está vazio.

Escopo de metadados

ItemDefinitionGroups têm escopo global nas propriedades globais e definidos, onde quer que eles são definidos.Definições de metadados padrão um ItemDefinitionGroup podem ser self-referential.Por exemplo, a seguir usa uma referência de metadados simples:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <m>%(m);m2</m>
    </i>
</ItemDefinitionGroup>

Também é possível usar uma referência qualificada metadados:

<ItemDefinitionGroup>
    <i>
      <m>m1</m>
      <m>%(i.m);m2</m>
    </i>
</ItemDefinitionGroup>

No entanto, a seguir inválido é válida:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <m>@(x)</m>
    </i>
</ItemDefinitionGroup>

A partir de MSBuild 3,5, ItemGroups também podem ser self-referential. Por exemplo:

<ItemGroup>
    <item Include="a">
        <m>m1</m>
        <m>%(m);m2</m>
    </item>
</ItemGroup>

Consulte também

Conceitos

envio em lote MSBuild