Condividi tramite


Metadati degli elementi nell'esecuzione in batch delle attività

In MSBuild è possibile dividere gli elenchi di elementi in diverse categorie, o batch, in base ai metadati di elemento ed eseguire un'attività una sola volta per ciascun batch. Comprendere esattamente quali elementi vengono passati a quale batch può essere fuorviante. In questo argomento vengono descritti gli scenari più comuni che comportano l'esecuzione in batch.

  • Divisione in batch di un elenco di elementi

  • Divisione in batch di più elenchi di elementi

  • Divisione in batch di un elemento per volta

  • Filtraggio di elenchi di elementi

Per ulteriori informazioni sulla divisione in batch con MSBuild, vedere Batch MSBuild.

Divisione in batch di un elenco di elementi

La divisione in batch consente di dividere un elenco di elementi in vari batch in base ai metadati di elemento e passare separatamente ogni batch a un'attività. Questa procedura è utile per compilare assembly satellite.

Nell'esempio riportato di seguito viene mostrato come dividere un elenco di elementi in batch in base ai metadati di elemento. L'elenco di elementi ExampColl viene diviso in tre batch in base ai metadati di elemento Number. La presenza di %(ExampColl.Number) nell'attributo Text indica a MSBuild la necessità di effettuare l'esecuzione in batch. L'elenco di elementi ExampColl viene diviso in tre batch basati sui metadati Number e ogni batch viene passato separatamente all'attività.

<Project
    xmlns="https://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>

L'attività Attività del messaggio visualizza le seguenti informazioni:

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

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

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

Divisione in batch di più elenchi di elementi

In MSBuild è possibile dividere più elenchi di elementi in batch in base agli stessi metadati. Risulta pertanto più agevole dividere diversi elenchi di elementi in batch per compilare più assembly. È ad esempio possibile dividere un elenco di elementi di file con estensione cs in un batch di applicazioni e in un batch di assembly e dividere un elenco di elementi di file di risorse in un batch di applicazioni e in un batch di assembly. È quindi possibile utilizzare l'esecuzione in batch per passare questi elenchi di elementi in un'attività e compilare sia l'applicazione che l'assembly.

Nota

Se un elenco di elementi passato a un'attività non contiene elementi con i metadati di riferimento, ogni elemento incluso nell'elenco di elementi verrà passato a ogni batch.

Nell'esempio riportato di seguito viene mostrato come dividere più elenchi di elementi in batch in base ai metadati di elemento. Gli elenchi di elementi ExampColl e ExampColl2 vengono divisi ognuno in tre batch in base ai metadati dell'elemento Number. La presenza di %(Number) nell'attributo Text indica a MSBuild la necessità di effettuare l'esecuzione in batch. Gli elenchi di elementi ExampColl e ExampColl2 vengono divisi in tre batch in base ai metadati Number e ogni batch viene passato separatamente all'attività.

<Project
    xmlns="https://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>

L'attività Attività del messaggio visualizza le seguenti informazioni:

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

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

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

Divisione in batch di un elemento per volta

È possibile eseguire la divisione in batch su metadati di elemento noti che vengono assegnati a ciascun elemento al momento della creazione. In questo modo ogni elemento di un insieme avrà alcuni metadati da utilizzare per il batch. Il valore dei metadati Identity è univoco per ogni elemento e risulta utile nel caso in cui si desideri dividere in un batch distinto ogni elemento di un elenco di elementi. Per un elenco completo di tutti i metadati di elemento noti, vedere Metadati noti degli elementi di MSBuild.

Nell'esempio riportato di seguito viene mostrato come dividere in batch un elemento di un elenco di elementi per volta. Poiché il valore dei metadati Identity di ogni elemento è univoco, l'elenco di elementi ExampColl viene diviso in sei batch e ogni batch conterrà un elemento dell'elenco di elementi. La presenza di %(Identity) nell'attributo Text indica a MSBuild la necessità di effettuare l'esecuzione in batch.

<Project
    xmlns="https://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: &quot;%(Identity)&quot; -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

L'attività Attività del messaggio visualizza le seguenti informazioni:

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

Filtraggio di elenchi di elementi

È possibile utilizzare l'esecuzione in batch per filtrare alcuni elementi da un elenco di elementi prima di passarli a un'attività. Ad esempio, l'applicazione di un filtro al valore Extension dei metadati di un elemento noto consente di eseguire un'attività solo sui file aventi una determinata estensione.

Nell'esempio riportato di seguito viene mostrato come dividere in batch un elenco di elementi in base ai metadati di elemento e quindi come filtrare tali batch quando vengono passati in un'attività. L'elenco di elementi ExampColl viene diviso in tre batch in base ai metadati di elemento Number. L'attributo Condition dell'attività specifica che verranno passati all'attività esclusivamente i batch con un valore di metadati di elemento Number pari a 2

<Project
    xmlns="https://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>

L'attività Attività del messaggio visualizza le seguenti informazioni:

Items in ExampColl: Item2;Item5

Vedere anche

Riferimenti

Metadati noti degli elementi di MSBuild

Elemento Item (MSBuild)

Elemento ItemMetadata (MSBuild)

Concetti

Batch MSBuild

Altre risorse

MSBuild Concepts

Riferimenti a MSBuild