Aracılığıyla paylaş


Toplu görev işlemede öğe meta verileri

MSBuild, öğe listelerini öğe meta verilerine göre farklı kategorilere veya toplu işlemlere ayırabilir ve her toplu işlemle bir görevi bir kez çalıştırabilir. Hangi toplu işlemle hangi öğelerin geçirildiğini tam olarak anlamak kafa karıştırıcı olabilir. Bu konu, toplu işlem içeren aşağıdaki yaygın senaryoları kapsar.

  • Öğe listesini toplu işlemlere bölme

  • Birkaç öğe listesini toplu işlere bölme

  • Bir kerede bir öğeyi toplu olarak oluşturma

  • Öğe listelerini filtreleme

MSBuild ile toplu işlem yapma hakkında daha fazla bilgi için bkz . Toplu işlem.

Öğe listesini toplu işlemlere bölme

Toplu işlem, öğe listesini öğe meta verilerine göre farklı toplu işlemlere bölmenize ve toplu işlerden her birini ayrı olarak bir göreve geçirmenize olanak tanır. Bu, uydu derlemeleri oluşturmak için kullanışlıdır.

Aşağıdaki örnekte, öğe listesinin öğe meta verilerine göre toplu işlemlere nasıl bölündüğü gösterilmektedir. Öğe ExampColl listesi, öğe meta verilerine göre Number üç toplu işleme ayrılır. özniteliğindeki Text varlığı%(ExampColl.Number), MSBuild'e toplu işlemin gerçekleştirilmesi gerektiğini bildirir. Öğe ExampColl listesi, meta veriler temelinde Number üç toplu işleme ayrılır ve her toplu işlem göreve ayrı olarak geçirilir.

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>
    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(ExampColl.Number) -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

İleti görevi aşağıdaki bilgileri görüntüler:

Number: 1 -- Items in ExampColl: Item1;Item4

Number: 2 -- Items in ExampColl: Item2;Item5

Number: 3 -- Items in ExampColl: Item3;Item6

Birkaç öğe listesini toplu işlere bölme

MSBuild, aynı meta verileri temel alarak birden çok öğe listesini toplu işlemlere bölebilir. Bu, birden çok derleme oluşturmak için farklı öğe listelerini toplu işlere bölmeyi kolaylaştırır. Örneğin, .cs dosyalarının bir öğe listesinin bir uygulama toplu işlemine ve derleme toplu işlemine, kaynak dosyalarının ise bir uygulama toplu işlemine ve derleme toplu işlemine ayrılmış bir öğe listesi olabilir. Daha sonra bu öğe listelerini tek bir göreve geçirmek ve hem uygulamayı hem de derlemeyi derlemek için toplu işlem kullanabilirsiniz.

Dekont

Göreve geçirilen öğe listesi başvurulmuş meta veriye sahip öğe içermiyorsa, bu öğe listesindeki her öğe her toplu işleme geçirilir.

Aşağıdaki örnekte, birden çok öğe listesinin öğe meta verilerine göre toplu işlemlere nasıl bölündüğü gösterilmektedir. ExampColl ve ExampColl2 öğe listelerinin her ikisi de öğe meta verilerine göre Number üç toplu işleme ayrılır. özniteliğindeki Text varlığı%(Number), MSBuild'e toplu işlemin gerçekleştirilmesi gerektiğini bildirir. ExampColl ve ExampColl2 öğe listeleri meta veriler temelinde Number üç toplu işleme ayrılır ve her toplu iş göreve ayrı olarak geçirilir.

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>

        <ExampColl2 Include="Item4">
            <Number>1</Number>
        </ExampColl2>
        <ExampColl2 Include="Item5">
            <Number>2</Number>
        </ExampColl2>
        <ExampColl2 Include="Item6">
            <Number>3</Number>
        </ExampColl2>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(Number) -- Items in ExampColl: @(ExampColl) ExampColl2: @(ExampColl2)"/>
    </Target>

</Project>

İleti görevi aşağıdaki bilgileri görüntüler:

Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4

Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5

Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6

Bir kerede bir öğeyi toplu iş

Toplu işlem, oluşturulduktan sonra her öğeye atanan iyi bilinen öğe meta verilerinde de gerçekleştirilebilir. Bu, koleksiyondaki her öğenin toplu işlem için kullanılacak bazı meta verileri olmasını garanti eder. Meta Identity veri değeri, öğe listesindeki her öğeyi ayrı bir toplu işleme bölmek için kullanışlıdır. İyi bilinen öğe meta verilerinin tam listesi için bkz . İyi bilinen öğe meta verileri.

Aşağıdaki örnekte, bir öğe listesindeki her öğeyi tek tek toplu olarak nasıl toplu olarak çalıştıracakları gösterilmektedir. Öğe ExampColl listesi, her biri öğe listesinin bir öğesini içeren altı toplu iş grubuna ayrılır. özniteliğindeki Text varlığı%(Identity), MSBuild'e toplu işlemin gerçekleştirilmesi gerektiğini bildirir.

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>

        <ExampColl Include="Item1"/>
        <ExampColl Include="Item2"/>
        <ExampColl Include="Item3"/>
        <ExampColl Include="Item4"/>
        <ExampColl Include="Item5"/>
        <ExampColl Include="Item6"/>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Identity: '%(Identity)' -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

İleti görevi aşağıdaki bilgileri görüntüler:

Identity: 'Item1' -- Items in ExampColl: Item1
Identity: 'Item2' -- Items in ExampColl: Item2
Identity: 'Item3' -- Items in ExampColl: Item3
Identity: 'Item4' -- Items in ExampColl: Item4
Identity: 'Item5' -- Items in ExampColl: Item5
Identity: 'Item6' -- Items in ExampColl: Item6

Ancak, Identity benzersiz olması garanti değildir; değeri özniteliğin değerlendirilen son değeridir Include . Bu nedenle, herhangi bir Include öznitelik birden çok kez kullanılırsa, bunlar birlikte toplu olarak oluşturulur. Aşağıdaki örnekte gösterildiği gibi, bu teknik özniteliklerin gruptaki Include her öğe için benzersiz olmasını gerektirir. Bu noktayı göstermek için aşağıdaki kodu göz önünde bulundurun:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Item Include="1">
      <M>1</M>
    </Item>
    <Item Include="1">
      <M>2</M>
    </Item>
    <Item Include="2">
      <M>3</M>
    </Item>
  </ItemGroup>

  <Target Name="Batching">
    <Warning Text="@(Item->'%(Identity): %(M)')" Condition=" '%(Identity)' != '' "/>
  </Target>
</Project>

Çıkış, ilk iki öğenin aynı toplu iş içinde olduğunu gösterir çünkü Include öznitelik onlar için aynıdır:

test.proj(15,5): warning : 1: 1;1: 2
test.proj(15,5): warning : 2: 3

Öğe listelerini filtreleme

Toplu işlem, öğe listesinden belirli öğeleri göreve geçirmeden önce filtrelemek için kullanılabilir. Örneğin, iyi bilinen öğe meta veri değerini filtrelemek Extension , görevi yalnızca belirli bir uzantıya sahip dosyalarda çalıştırmanıza olanak tanır.

Aşağıdaki örnekte, öğe listesinin öğe meta verilerine göre toplu işlemlere nasıl bölündüğü ve sonra bir göreve geçirildiğinde bu toplu işlemlerin nasıl filtreleneceği gösterilmektedir. Öğe ExampColl listesi, öğe meta verilerine göre Number üç toplu işleme ayrılır. Görevin Condition özniteliği, yalnızca öğesi meta veri değerine 2 sahip Number toplu işlemlerin göreve geçirileceğini belirtir

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>

    </ItemGroup>

    <Target Name="Exec">
        <Message
            Text = "Items in ExampColl: @(ExampColl)"
            Condition="'%(Number)'=='2'"/>
    </Target>

</Project>

İleti görevi aşağıdaki bilgileri görüntüler:

Items in ExampColl: Item2;Item5