Condividi tramite


Procedura: creare batch di attività tramite i metadati degli elementi

Aggiornamento: novembre 2007

In MSBuild è possibile dividere gli insiemi di elementi in diverse categorie, o batch, basate sui metadati degli elementi 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 insieme di elementi

  • Divisione in batch di più insiemi di elementi

  • Divisione in batch di un elemento per volta

  • Applicazione di filtri agli insiemi di elementi

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

Divisione in batch di un insieme di elementi

La divisione in batch consente di dividere un insieme di elementi in batch diversi basati sui metadati di un elemento e di passare ciascun batch in un'attività separatamente. Questa procedura è utile per creare assembly satellite.

Nell'esempio riportato di seguito viene mostrato come dividere un insieme di elementi in batch basati sui metadati degli elementi. L'insieme di elementi ExampColl viene diviso in tre batch basati sui metadati dell'elemento Number. La presenza di %(ExampColl.Number) nell'attributo Text notifica a MSBuild che è necessaria l'esecuzione in batch. L'insieme di elementi ExampColl viene ripartito in tre batch basati sui metadati Number e ciascun 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ù insiemi di elementi

In MSBuild è possibile dividere più insiemi di elementi in batch in base agli stessi metadati. Ciò semplifica la divisione di più insiemi di elementi in batch per creare assembly multipli. Si può, ad esempio, dividere un insieme di elementi di file .cs in un batch di applicazione e in un batch di assembly e dividere un insieme di elementi di file di risorse in un batch di applicazione e in un batch di assembly. È possibile quindi utilizzare l'esecuzione in batch per passare questi insiemi di elementi in un'attività e generare sia l'applicazione che l'assembly.

Nota:

Se un insieme di elementi passato in un'attività non contiene elementi con metadati di riferimento, ogni elemento incluso in questo insieme di elementi verrà passato in tutti i batch.

Nell'esempio riportato di seguito viene descritto come dividere più insiemi di elementi in batch basati sui metadati degli elementi. Gli insiemi di elementi ExampColl e ExampColl2 vengono divisi ciascuno in tre batch basati sui metadati dell'elemento Number. La presenza di %(Number) nell'attributo Text notifica a MSBuild che è necessaria l'esecuzione in batch. Gli insiemi di elementi ExampColl e ExampColl2 vengono suddivisi in tre batch basati sui metadati Number e ciascun 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 ciascun elemento ed è utile per dividere in un batch distinto ogni elemento di un insieme 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 ogni elemento di un insieme di elementi, uno alla volta. Poiché il valore dei metadati Identity di ogni elemento è univoco, l'insieme di elementi ExampColl viene suddiviso in sei batch e ciascun batch conterrà un elemento dell'insieme di elementi. La presenza di %(Identity) nell'attributo Text notifica a MSBuild che è necessaria 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

Applicazione di filtri agli insiemi di elementi

È possibile utilizzare la divisione in batch per filtrare ed escludere alcuni elementi da un insieme 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 insieme di elementi basandosi sui metadati dell'elemento e quindi come filtrare tali batch quando vengono passati in un'attività. L'insieme di elementi ExampColl viene diviso in tre batch basati sui metadati dell'elemento Number. L'attributo Condition dell'attività specifica che verranno passati all'attività soltanto i batch aventi un valore di metadati dell'elemento Number di 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

Concetti

Batch MSBuild

Riferimenti

Metadati noti degli elementi di MSBuild

Elemento Item (MSBuild)

Elemento ItemMetadata (MSBuild)

Altre risorse

Concetti relativi a MSBuild

Riferimenti a MSBuild