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