Batch MSBuild
In MSBuild è possibile dividere gli elenchi di elementi in diverse categorie, o batch, in base ai metadati di elemento 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à consente di semplificare i file di progetto, offrendo un metodo per dividere gli elenchi di elementi in vari batch e passare separatamente ciascuno di questi batch a 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à.Nell'esempio seguente viene diviso l'elenco di elementi Example in batch in base al valore dei metadati di elemento Color e ogni batch viene passato separatamente all'attività MyTask.
[!NOTA]
Se non viene fatto riferimento all'elenco 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 di elemento da utilizzare per l'esecuzione 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 Metadati degli elementi nell'esecuzione in batch delle attività.
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 seguente viene illustrato un elemento Target che contiene un attributo Outputs con la notazione %(ItemMetaDataName).In MSBuild l'elenco di elementi Example viene suddiviso in batch in base ai metadati di elemento Color e vengono analizzati i timestamp dei file di output per ogni 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 Metadati degli elementi nell'esecuzione in batch delle destinazioni.
Funzioni delle proprietà che utilizzano i metadati
La suddivisione in batch può essere controllata da funzioni delle proprietà che includono metadati.Di seguito è riportato un esempio:
$([System.IO.Path]::Combine($(RootPath),%(Compile.Identity)))
utilizza Combine per combinare un percorso della cartella radice con un percorso dell'elemento Compile.
Le funzioni delle proprietà potrebbero non venire visualizzate nei valori dei metadati.Di seguito è riportato un esempio:
%(Compile.FullPath.Substring(0,3))
non è consentito.
Per ulteriori informazioni sulle funzioni delle proprietà, vedere Funzioni delle proprietà.
Vedere anche
Riferimenti
Elemento ItemMetadata (MSBuild)