Il concetto che si dovrebbe essere interessato a è conosciuta come Batching.
ho coperto questo scenario esatto sul mio blog a http://www.sedodream.com/PermaLink,guid,5f1e0445-ce3d-4052-ba80-42fd19512d42.aspx
Ecco il testo di questo post di blog, è possibile scaricare i file menzionati al link sopra.
Oggi qualcuno mi ha parlato di un collega che stava avendo problemi con MSBuild. Mi ha detto che stava cercando di copiare un set di file su un set di server diversi. Ma il problema era che non sapeva come ottenerlo senza eseguire più invocazioni di operazioni di copia. Gli ho detto che avrebbe potuto ottenere ciò usando MSBuild Batching. Il raggruppamento è un processo di esecuzione di un'attività (o di una destinazione) su un insieme di elementi (lotti) alla volta. Un batch può anche includere un singolo oggetto. Pertanto, in questo scenario, è necessario eseguire la copia una volta per ciascun server a cui si desidera eseguire la distribuzione. Ho creato un semplice file msbuild che lo dimostra in due modi diversi. Il primo modo utilizza il raggruppamento delle attività, che può essere visto nell'obiettivo Test. E l'altro utilizza il batch di destinazione che può essere visto nel target DoItCore. Ho anche creato un obiettivo pulito, che non ha nulla a che fare con il batching.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Test">
<ItemGroup>
<SourceFiles Include="*.txt"/>
<Dest Include="One;Two;Three;Four;Five"/>
</ItemGroup>
<Target Name="Test">
<Copy SourceFiles ="@(SourceFiles)" DestinationFolder="%(Dest.FullPath)"/>
<Message Text="Fullpath: %(Dest.FullPath)"/>
</Target>
<!-- These targets demonstrate target batching -->
<Target Name="DoIt" DependsOnTargets="DoItCore"/>
<Target Name="DoItCore" Inputs="@(SourceFiles)" Outputs="%(Dest.FullPath)">
<Copy SourceFiles="@(SourceFiles)" DestinationFolder="%(Dest.FullPath)"/>
</Target>
<!-- This will clean up the files -->
<Target Name="Clean">
<CreateItem Include="%(Dest.FullPath)\**\*">
<Output ItemName="FilesToDelete" TaskParameter="Include"/>
</CreateItem>
<Delete Files="@(FilesToDelete)"/>
</Target>
</Project>
Il raggruppamento è un argomento avanzato di MSBuild ed è deplorevolmente trascurato. Devo ammettere che sono colpevole di non averne scritto abbastanza io stesso. Ci sono alcune buone risorse di batch, sono elencate di seguito.
Ecco alcuni post di blog relativi al batch che ho pubblicato.
Grazie, Sayed Ibrahim Hashimi
My Book: Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
fonte
2009-06-01 13:49:42
Grande. Grazie, i commenti lo rendono molto chiaro. So che potrei sembrare un po 'superficiale se sto dicendo che non sto cercando di diventare un guru di MSBuild, ma piuttosto di risolvere il mio problema qui. Ho notato che usando una tecnologia caso per caso c'è questo punto in una curva di apprendimento in cui hai abbastanza conoscenze sparse che uno studio completo da zero è molto più semplice e mette tutto al suo posto. Trovo questo spesso il modo più preferibile di imparare qualcosa. –
Se non hai bisogno di sapere tutto ora, allora funziona bene. Ho corretto un errore nell'esempio (mi dispiace per quello). È necessario chiamare qualsiasi attività (come copia) in un obiettivo. L'ho messo in un obiettivo. Chiami MSBuild con quel nome di destinazione (CopyFiles) e eseguirà il target. – Vaccano