Condividi tramite


Batch MSBuild

Aggiornamento: novembre 2007

In MSBuild è possibile dividere gli insiemi di elementi in diverse categorie, o batch, basate sui metadati degli elementi ed eseguire una destinazione o un'attività una sola volta per ciascun batch.

Divisione in batch di attività

La divisione in batch di un'attività permette di semplificare i file di progetto, offrendo un metodo per dividere gli insiemi di elementi in vari batch e passare separatamente ciascuno di questi batch in un'attività. Ciò significa che un file di progetto necessita di una sola dichiarazione dell'attività e dei rispettivi attributi, anche se può essere eseguito più volte.

In MSBuild è necessario specificare che si desidera eseguire la divisione in batch con un'attività utilizzando la notazione %(NomeMetadatiElemento) in uno degli attributi dell'attività. L'esempio seguente divide l'insieme di elementi Example in batch basati sul valore dei metadati Color dell'elemento e passa ciascuno dei batch all'attività MyTask separatamente.

Nota:

Se non vi sono altri riferimenti all'insieme di elementi negli attributi dell'attività oppure se il nome dei metadati può risultare ambiguo, è possibile utilizzare la notazione %(InsiemeElementi.NomeMetadatiElemento) per specificare il nome completo del valore dei metadati dell'elemento da utilizzare per la divisione in batch.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Per ulteriori esempi sulla divisione in batch, vedere Procedura: creare batch di attività tramite i metadati degli elementi.

Divisione in batch delle destinazioni

Prima di eseguire una destinazione, in MSBuild viene controllato se gli input e gli output della destinazione sono aggiornati. In caso affermativo, la destinazione verrà ignorata. Se all'interno di una destinazione è presente un'attività che utilizza la divisione in batch, MSBuild deve stabilire se gli input e gli output di ciascun batch di elementi risultano aggiornati. In caso contrario, la destinazione verrà eseguita ogni volta che viene raggiunta.

Nell'esempio riportato di seguito viene illustrato un elemento Target contenente un attributo Outputs con la notazione %(NomeMetadatiElemento). In MSBuild l'insieme di elementi Example verrà diviso in batch basati sui metadati dell'elemento Color e verranno analizzati i timestamp dei file di output di ciascun batch. Se gli output di un batch non risultano aggiornati, la destinazione verrà eseguita. In caso contrario, la destinazione verrà ignorata.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask"
        Inputs="@(Example)"
        Outputs="%(Color)\MyFile.txt">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Per un altro esempio sulla divisione in batch delle destinazioni, vedere Procedura: creare batch di destinazioni tramite i metadati di elementi.

Vedere anche

Concetti

Concetti avanzati relativi a MSBuild

Riferimenti

Elemento ItemMetadata (MSBuild)

Altre risorse

Concetti relativi a MSBuild

Riferimenti a MSBuild