Sdílet prostřednictvím


Definice položek

MSBuild2.0 umožňuje deklaraci statických položek v souborech projektu pomocí ItemGroup prvku.Avšak metadata lze přidat pouze na úrovni položky i v případě, že metadata jsou stejné pro všechny položky.Spuštění v MSBuild 3.5 prvek projektu s názvem ItemDefinitionGroup předchází toto omezení.ItemDefinitionGroupUmožňuje definovat sadu definic položek, které přidá výchozí hodnoty metadat ke všem položkám v pojmenované položky typu.

ItemDefinitionGroup Element se zobrazí bezprostředně po projektu element v souboru projektu.Definice zboží poskytuje následující funkce:

  • Můžete definovat globální výchozí metadata pro položky mimo cíl.To znamená, že stejná metadata se vztahuje na všechny položky zadaného typu.

  • Typy položek můžete mít více definicí.Při přidání další metadata specifikace typu poslední specifikace má přednost. (Metadata se řídí příkazu import takto vlastnosti.)

  • Metadata mohou být doplňkové látky.Například CDefines hodnoty počítají podmíněně, v závislosti na vlastnosti, která jsou nastavena.Například:MT;STD_CALL;DEBUG;UNICODE

  • Metadata mohou být odstraněny.

  • Podmínky lze použít k řízení začlenění metadat.

Položka metadat výchozí hodnoty

Metadata položky, která je definována v ItemDefinitionGroup je prohlášení výchozí metadat.Pokud definujete zboží, které obsahují hodnoty metadat používá ItemGroup metadata nelze použít.

[!POZNÁMKA]

V mnoha příkladech v tomto tématu ItemDefinitionGroup prvek je zobrazen, ale pro přehlednost je vynechán odpovídající definici ItemGroup.

Metadata explicitně definované v ItemGroup přednost metadat v ItemDefinitionGroup.Metadata v ItemDefinitionGroup platí pouze pro nedefinované metadat ItemGroup.Příklad:

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

V tomto příkladu je výchozí metadat "m" použít položku "i", protože metadat "m" není explicitně definován položkou "i".Výchozí metadat "n" však není použít položku "i", protože metadat "n" je již definován položkou "i".

[!POZNÁMKA]

Názvy prvků XML a parametr rozlišují velká a malá písmena.Metadata položky a vlastnosti položky nebo názvy nejsou malá a velká písmena.ItemDefinitionGroup předměty, které mají názvy, které se liší pouze v případě tedy má být považována za stejné ItemGroup.

Hodnota zdroje.

Hodnoty pro metadata, která je definována v ItemDefinitionGroup mohou pocházet z mnoha různých zdrojů takto:

  • Vlastnost PropertyGroup

  • Položku z ItemDefinitionGroup

  • Transformace položky pro položku ItemDefinitionGroup

  • Proměnné prostředí

  • Globální vlastnosti (z MSBuild.exe příkazového řádku)

  • Rezervované vlastnosti

  • Známé metadata položky z ItemDefinitionGroup

  • Oddíl CDATA <![CDATA [zde není analyzovat]]>

[!POZNÁMKA]

Metadata položky z ItemGroup je užitečné v deklaraci ItemDefinitionGroup metadata, protože ItemDefinitionGroup prvky jsou zpracovány před ItemGroup prvky.

Doplňkové látky a více definic

Při přidání definice nebo použití více ItemDefinitionGroups, mějte na paměti následující:

  • Doplňuje se další metadata specifikace typu.

  • Poslední specifikace má přednost.

Pokud máte více ItemDefinitionGroups, každá následující specifikace přidá předchozí definici jeho metadata.Příklad:

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

V tomto příkladu je přidán metadat "o" k "m" a "n".

Kromě toho lze také přidat metadata dříve definované hodnoty.Příklad:

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

V tomto příkladu dříve definované hodnoty pro metadata "m" (m1) je přidán na novou hodnotu (m2), takže konečná hodnota je "m1, m2".

[!POZNÁMKA]

Také může dojít ve stejné ItemDefinitionGroup.

Při přepsání dříve definovaná metadata poslední specifikace má přednost.V následujícím příkladu přechází konečné hodnoty metadat "m" z "m1" s "m1a".

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

Použití podmínek v ItemDefinitionGroup

Podmínky v ItemDefinitionGroup umožňuje řídit začlenění metadat.Příklad:

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

V tomto případě je součástí výchozí metadat "m1" u položky "i", pouze pokud je hodnota vlastnosti "Konfigurace" "Ladění".

[!POZNÁMKA]

V podmínkách jsou podporovány pouze odkazy na místní metadata.

Odkazy na metadata definované v dřívějších ItemDefinitionGroup jsou lokální položku, skupinu definic.To znamená že rozsah odkazy jsou konkrétní položky.Příklad:

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

V tomto příkladu odkazuje položka "i" Předmět "test" v podmínce.

Potlačení a odstranění metadat

Metadat definované v prvku ItemDefinitionGroup v předchozím ItemDefinitionGroup prvku lze přepsat nastavením hodnoty metadat na prázdné.Položka metadat můžete také účinně odstranit nastavením na prázdnou hodnotu.Příklad:

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

Položka "i" stále obsahuje metadata "m", ale jeho hodnota je prázdná.

Obor metadat

ItemDefinitionGroups mají globální rozsah na definované a globální vlastnosti všude, kde jsou definovány.Výchozí definice metadat v ItemDefinitionGroup může být odkazující na sebe.Následující příklad používá jednoduché metadata odkazu:

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

Lze také použít referenční kvalifikovanou metadat:

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

Nicméně toto není platný:

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

Od začátku roku MSBuild 3.5, ItemGroups může být také odkazující na sebe.Příklad:

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

Viz také

Koncepty

Dávkování nástroje MSBuild