Definice položek
MSBuild2.0 umožňuje pomocí statické deklarace položek v souborech projektu ItemGroup prvku.Metadata mohou však přidán pouze na úrovni položky, i když metadat je shodné pro všechny položky.MSBuild3.5 představuje prvek projektu s názvem ItemDefinitionGroup , předchází toto omezení.ItemDefinitionGroup umožňuje definovat sadu definice položky, které všechny položky typu pojmenovanou položku přidat výchozí hodnoty metadat.
ItemDefinitionGroup element se zobrazí bezprostředně po projektu elementu v souboru projektu.Definice položek poskytuje následující funkce:
Můžete definovat globální výchozí metadata pro položky mimo cíl.Stejná metadata, platí pro 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 přednost poslední specifikace.(Metadata následující pořadí importu takto vlastnosti).
Metadata mohou být doplňkové látky.Například hodnoty CDefines jsou podmíněně nahromaděné podle vlastností, která jsou nastavena.Například:MT;STD_CALL;DEBUG;UNICODE
Metadata lze odebrat.
Podmínky lze řídit zařazení metadat.
Položka metadat výchozí hodnoty
Položky metadata, která je definována v ItemDefinitionGroup je na prohlášení výchozí metadat.Metadata neplatí, pokud definujete položku, která se používá ItemGroup obsahují hodnoty metadat.
[!POZNÁMKA]
ItemDefinitionGroup prvek je zobrazen v mnoha příkladech v tomto tématu, ale jeho odpovídající definici ItemGroup vynechán pro přehlednost.
Metadata explicitně definované v ItemGroup přednost metadat v ItemDefinitionGroup.Metadata v ItemDefinitionGroup platí pouze pro nedefinované metadata 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" u položky "i" protože metadata "m" není explicitně definován v položce "i".Výchozí metadat "n" však není u položky "i" protože metadata "n" je již definována položka "i".
[!POZNÁMKA]
Názvy prvků XML a parametr rozlišují velká a malá písmena.Metadata položky a vlastnost položky nebo názvy nejsou rozlišována.ItemDefinitionGroup položky, které mají názvy, které se liší pouze v případě, proto by měly být považovány 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žky z ItemDefinitionGroup
Transformace položky pro položku ItemDefinitionGroup
Proměnné prostředí
Globální vlastnosti (z příkazového řádku MSBuild.exe)
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 metadata ItemDefinitionGroup, 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í:
Typ doplňuje další metadata specification.
Poslední specifikace přednost.
Máte více ItemDefinitionGroups, každé následné specifikace přidá předchozí definice metadat.Příklad:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<n>n1</n>
</i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<i>
<o>o1</o>
</i>
</ItemDefinitionGroup>
V tomto příkladu metadat "o" vkládá "m" a "n".
Kromě toho mohou být přidány také 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 je přidána dříve definované hodnoty pro metadata "m" (m1) na novou hodnotu (m2) tak, že konečná hodnota "m1, m2".
[!POZNÁMKA]
To může dojít také v ItemDefinitionGroup stejné.
Při přepsání dříve definovaná metadata přednost poslední specifikace.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>
Pomocí podmínky ItemDefinitionGroup
Můžete použít podmínky v ItemDefinitionGroup řízení zařazení 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]
Podmínky jsou podporovány pouze odkazy na místní metadata.
Odkazy na metadata definované v dřívějších ItemDefinitionGroup jsou místní položky skupinu definic.Obor 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" zboží "test" v podmínce.
Potlačení a odstranění metadat
Metadata, které jsou definovány v prvku ItemDefinitionGroup lze přepsat novější ItemDefinitionGroup prvku nastavením hodnoty metadat na prázdné.Metadata položky lze 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 vlastnosti definované a globální všude, kde jsou definovány.Výchozí definice metadat v ItemDefinitionGroup lze odkazovat.Například následující používá metadata jednoduchý odkaz:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>%(m);m2</m>
</i>
</ItemDefinitionGroup>
Kvalifikovaný metadata odkazu lze také:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>%(i.m);m2</m>
</i>
</ItemDefinitionGroup>
Následující je však není platný:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>@(x)</m>
</i>
</ItemDefinitionGroup>
V 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>