Compartilhar via


Definições de item

MSBuild 2,0 permite declarações estático de itens em arquivos de projeto usando o elemento de ItemGroup .Em o entanto, os metadados podem ser adicionados somente em 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 a superar essa limitação.ItemDefinitionGroup permite que você defina um conjunto de definições de item, que adicionam valores padrão de metadados para todos os itens no tipo de item chamado.

O elemento de ItemDefinitionGroup aparece imediatamente após o elemento de Projeto do arquivo de projeto.As definições de item fornecem a seguinte funcionalidade:

  • Você pode definir metadados padrão globais para itens fora de um destino.Isto é, os mesmos metadados aplicam-se a todos os itens do tipo especificado.

  • Os tipos de item podem ter várias definições.Quando as especificações adicionais de metadados são adicionadas ao tipo, a especificação a mais recente tem precedência.(Os metadados seguem a mesma ordem de importação que seguem as propriedades.)

  • os metadados podem ser aditivos.Por exemplo, os valores de CDefines são acumulados condicionalmente, dependendo das propriedades que são definidas.Por exemplo, MT;STD_CALL;DEBUG;UNICODE.

  • os metadados podem ser removidos.

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

Valores padrão de metadados de item

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

ObservaçãoObservação

Em muitos dos exemplos em este tópico, um elemento de ItemDefinitionGroup que é mostrado mas sua definição de ItemGroup correspondente é omitida para maior clareza.

Os metadados definidas explicitamente em um ItemGroup têm precedência sobre metadados em ItemDefinitionGroup.Os metadados são aplicados em ItemDefinitionGroup somente para os metadados indefinidas em um 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>

Em esse exemplo, os metadados padrão “m” são aplicados ao item “i” porque os metadados “m” não são explicitamente definidos pelo item “i”.Em o entanto, os metadados padrão “em” não são aplicados ao item “i” porque os metadados “em” já estão definidos pelo item “i”.

ObservaçãoObservação

Os nomes de elemento XML e de parâmetro diferenciam maiúsculas de minúsculas.Os metadados de item e nomes de item/propriedade não diferenciam maiúsculas de minúsculas.Portanto, os itens de ItemDefinitionGroup que têm nomes que diferem somente por casos devem ser tratados como o mesmo ItemGroup.

Fontes de valor

Os valores para os metadados que é definido em um ItemDefinitionGroup podem vir de várias fontes diferentes, como segue:

  • propriedade de PropertyGroup

  • item de um ItemDefinitionGroup

  • O item transformações em um item de ItemDefinitionGroup

  • variável de ambiente

  • Propriedade global (de linha de comando MSBuild.exe)

  • propriedade reservado

  • metadados conhecidos em um item de um ItemDefinitionGroup

  • Seção CDATA <![CDATA[qualquer coisa aqui é analisado]]>

ObservaçãoObservação

Os metadados de um item de ItemGroup não são úteis em uma declaração de metadados de ItemDefinitionGroup porque os elementos de ItemDefinitionGroup são processados antes de elementos de ItemGroup.

Definições aditivas e várias

Quando você adiciona definições ou uso mais ItemDefinitionGroups, lembre-se do seguinte:

  • A especificação extra de metadados é adicionada ao tipo.

  • A especificação a mais recente tem precedência.

Quando você tiver vários ItemDefinitionGroups, cada especificação subseqüente adiciona os seus metadados para a definição anterior.Por exemplo:

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

Em esse exemplo, os metadados “o” são adicionados a “m” a” e “em.

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

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

Em esse exemplo, o valor definido anteriormente para os metadados “m” m1 () é adicionado ao novo valor (m2), para que o valor final é “m1; m2”.

ObservaçãoObservação

Isso também pode ocorrer no mesmo ItemDefinitionGroup.

Quando você substituir os metadados definidos anteriormente, a especificação a mais recente tem precedência.Em o exemplo, o valor final dos metadados “m” go de “m1” a “m1a”.

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

Usando condições em um ItemDefinitionGroup

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

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

Em esse caso, os metadados padrão “m1” no item “me” sou incluído somente se o valor da propriedade “configurações” é “depuração”.

ObservaçãoObservação

Somente as referências locais de metadados são suportadas em condições.

Referências para os metadados definidos em um ItemDefinitionGroup anterior são locais para o item, não definição de grupo.Isto é, o escopo de referências é itens - específico.Por exemplo:

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

Em esse exemplo, item “i” item “” teste de referências em condição.

Substituindo e exclusão de metadados

Os metadados definidos em um elemento de ItemDefinitionGroup podem ser substituídos em um elemento posterior de ItemDefinitionGroup definindo o valor de metadados para nula.Você também pode efetivamente excluir um item de metadados definindo o para um valor vazio.Por exemplo:

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

O item “me” ainda contenho os metadados “m”, mas seu valor agora está vazia.

Escopo de metadados

ItemDefinitionGroups tem escopo global em propriedades definidas e globais onde quer que são definidos.As definições padrão de metadados em um ItemDefinitionGroup podem ser são referenciais.Por exemplo, o seguinte usa metadados referenciam simples:

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

Uma referência qualificada de metadados também pode ser usada:

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

Em o entanto, o seguinte é válido:

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

Iniciando em MSBuild 3,5, ItemGroups também pode ser são referencial.Por exemplo:

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

Consulte também

Conceitos

Processamento em lotes do MSBuild