Öğe tanımları

MSBuild 2.0, ItemGroup öğesini kullanarak proje dosyalarındaki öğelerin statik bildirimini etkinleştirir. Ancak meta veriler tüm öğeler için aynı olsa bile yalnızca öğe düzeyinde eklenebilir. MSBuild 3.5'den başlayarak, ItemDefinitionGroup adlı bir proje öğesi bu sınırlamanın üstesinden gelir. ItemDefinitionGroup , adlandırılmış öğe türündeki tüm öğelere varsayılan meta veri değerleri ekleyen bir öğe tanımları kümesi tanımlamanızı sağlar.

ItemDefinitionGroup öğesi, proje dosyasının Project öğesinden hemen sonra görüntülenir. Öğe tanımları aşağıdaki işlevleri sağlar:

  • Hedef dışındaki öğeler için genel varsayılan meta veriler tanımlayabilirsiniz. Diğer bir ifadeyle, aynı meta veriler belirtilen türdeki tüm öğeler için geçerlidir.

  • Öğe türlerinin birden çok tanımı olabilir. Türüne ek meta veri belirtimleri eklendiğinde, son belirtim öncelikli olur. (Meta veriler, özelliklerle aynı içeri aktarma sırasını izler.)

  • Meta veriler eklenebilir. Örneğin, CDefines değerleri, ayarlanan özelliklere bağlı olarak koşullu olarak birikir. Örneğin, MT;STD_CALL;DEBUG;UNICODE.

  • Meta veriler kaldırılabilir.

  • Koşullar, meta verilerin eklenmesini denetlemek için kullanılabilir.

Öğe meta verileri varsayılan değerleri

ItemDefinitionGroup içinde tanımlanan öğe meta verileri yalnızca varsayılan meta verilerin bildirimidir. Meta veri değerlerini içeren bir ItemGroup kullanan bir Öğe tanımlamadığınız sürece meta veriler uygulanmaz.

Dekont

Bu konudaki örneklerin çoğunda bir ItemDefinitionGroup öğesi gösterilir, ancak netlik için buna karşılık gelen ItemGroup tanımı atlanır.

Bir ItemGroup'ta açıkça tanımlanan meta veriler, ItemDefinitionGroup'taki meta verilere göre önceliklidir. ItemDefinitionGroup içindeki meta veriler yalnızca bir ItemGroup içindeki tanımlanmamış meta veriler için uygulanır. Örneğin:

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

Bu örnekte, "m" meta verileri "i" öğesi tarafından açıkça tanımlanmadığından varsayılan "m" meta verileri "i" Öğesine uygulanır. Ancak, "n" meta verileri "i" öğesi tarafından tanımlandığından varsayılan "n" meta verileri "i" Öğesine uygulanmaz.

Dekont

XML Öğesi ve Parametre adları büyük/küçük harfe duyarlıdır. Öğe meta verileri ve Öğe/Özellik adları büyük/küçük harfe duyarlı değildir. Bu nedenle, yalnızca büyük/küçük harfe göre farklı adlara sahip ItemDefinitionGroup öğeleri aynı ItemGroup olarak ele alınmalıdır.

Değer kaynakları

ItemDefinitionGroup içinde tanımlanan meta veriler için değerler aşağıdaki gibi birçok farklı kaynaktan gelebilir:

  • PropertyGroup Özelliği

  • ItemDefinitionGroup öğesi

  • ItemDefinitionGroup Öğesinde öğe dönüşümü

  • Ortam değişkeni

  • Genel özellik (MSBuild.exe komut satırından)

  • Ayrılmış özellik

  • Bir ItemDefinitionGroup öğesindeki iyi bilinen meta veriler

  • CDATA bölümü <![ CDATA[buradaki her şey ayrıştırılmaz]]>

Dekont

ItemDefinitionGroup öğeleri ItemGroup öğelerinden önce işlendiğinden, ItemGroup'tan alınan öğe meta verileri ItemDefinitionGroup meta veri bildiriminde kullanışlı değildir.

Eklemeli ve birden çok tanım

Tanım eklediğinizde veya birden çok ItemDefinitionGroup kullandığınızda aşağıdakileri unutmayın:

  • Türüne ek meta veri belirtimi eklenir.

  • Son belirtim önceliklidir.

Birden çok ItemDefinitionGroup'nuz olduğunda, sonraki her belirtim meta verilerini önceki tanıma ekler. Örneğin:

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

Bu örnekte, "o" meta verileri "m" ve "n" öğesine eklenir.

Ayrıca, önceden tanımlanmış meta veri değerleri de eklenebilir. Örneğin:

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

Bu örnekte, "m" (m1) meta verileri için önceden tanımlanmış değer yeni değere (m2) eklenerek son değerin "m1; m2".

Dekont

Bu durum aynı ItemDefinitionGroup içinde de oluşabilir.

Önceden tanımlanmış meta verileri geçersiz kıldığınızda, son belirtim önceliklidir. Aşağıdaki örnekte, "m" meta verilerinin son değeri "m1" yerine "m1a" olur.

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

ItemDefinitionGroup'ta koşulları kullanma

Meta verilerin eklenmesini denetlemek için Bir ItemDefinitionGroup içindeki koşulları kullanabilirsiniz. Örneğin:

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

Bu durumda, "i" öğesindeki varsayılan meta veriler "m1" yalnızca "Configuration" özelliğinin değeri "Debug" olduğunda eklenir.

Dekont

Koşullarda yalnızca yerel meta veri başvuruları desteklenir.

Önceki bir ItemDefinitionGroup içinde tanımlanan meta veri başvuruları, tanım grubu için değil, öğenin yerelidir. Diğer bir ifadeyle, başvuruların kapsamı öğeye özgüdür. Örneğin:

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

Yukarıdaki örnekte, "i" öğesi Koşulundaki "test" öğesine başvurur. MSBuild bir ItemDefinitionGroup içindeki başka bir öğenin meta verilerine yapılan başvuruyu boş dize olarak yorumladığı için bu Koşul hiçbir zaman doğru olmayacaktır. Bu nedenle, "m" "m0" olarak ayarlanır.

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

Yukarıdaki örnekte Koşul, "evet" öğesi için "i" öğesinin meta veri değerine başvuracağı için "m", "m1" değerine ayarlanır.

Meta verileri geçersiz kılma ve silme

Bir ItemDefinitionGroup öğesinde tanımlanan meta veriler, meta veri değeri başka bir değere ayarlanarak sonraki bir ItemDefinitionGroup öğesinde geçersiz kılınabilir. Meta veri öğesini boş bir değere ayarlayarak da etkili bir şekilde silebilirsiniz. Örneğin:

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

"i" öğesi hala "m" meta verilerini içeriyor, ancak değeri artık boş.

Meta verilerin kapsamı

ItemDefinitionGroups, tanımlandığı her yerde tanımlı ve genel özellikler üzerinde genel kapsama sahiptir. Bir ItemDefinitionGroup içindeki varsayılan meta veri tanımları kendi kendine başvuruda bulunabilir. Örneğin, aşağıdakiler basit bir meta veri başvurusu kullanır:

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

Nitelikli meta veri başvurusu da kullanılabilir:

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

Ancak, aşağıdakiler geçerli değildir:

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

MSBuild 3.5 sürümünden başlayarak, ItemGroups kendi kendine başvuran da olabilir. Örneğin:

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