2010-03-16 10 views
7

Ho bisogno di una serie di attività che devono essere eseguite esattamente una volta per l'intera soluzione. Questo eseguirà attività che modificheranno ciascun progetto per eseguire un insieme separato di attività per ciascun progetto. Lo abbiamo fatto in precedenza utilizzando un progetto separato per la soluzione che aveva i compiti a livello di soluzione, ma vogliamo allontanarci da quello. Qualcuno ha fatto questo o qualcuno ha qualche suggerimento su come implementarlo?Eseguire una corsa di destinazione una volta a livello di soluzione in MSBuild

risposta

6

Poiché i file della soluzione non sono in formato MSBuild, non possono essere facilmente estesi o personalizzati. Se si desidera un maggiore controllo sul processo di generazione, è necessario creare un file msbuild "driver" che sostituisca il file della soluzione. All'interno di questo file di driver si dovrebbero creare tutti i progetti necessari e svolgere alcune attività aggiuntive. Lo faresti usando lo MSBuild task. Ecco un esempio che mostra come creare più di un progetto.

<Project ...> 
    <ItemGroup> 
     <Projects Include="proj01.csproj"/> 
     <Projects Include="proj02.csproj"/> 
     <Projects Include="proj03.csproj"/> 
    </ItemGroup> 

    <Target Name="BuildAll"> 
     <MSBuild Projects="@(Projects)" BuildInParallel="true" /> 
    </Target> 

</Project> 

Quindi nel tuo caso devi solo eseguire le attività prima di costruire i progetti. Si noti inoltre che ho specificato il valore true per BuildInParallel indicando che MSBuild può provare e creare più di un progetto contemporaneamente.

+0

Questa è un'idea interessante. Credo che funzionerà anche se voglio svolgere alcuni compiti aggiuntivi prima di costruire i progetti? (E quelle attività aggiuntive modificheranno i progetti stessi.) – Chandam

+0

La creazione di questi file di build è uno scenario molto comune. Molte persone preferiscono scrivere questi tipi di file di build utilizzando la soluzione per le build di produzione. Nel mio caso utilizzo solo i file di soluzione per Visual Studio, mai per le build effettive. –

+0

In questo approccio si dice che se il mio progetto 1 dipende dal progetto 2, allora msbuild non costruirà il mio progetto 2 due volte, ritardando così il processo di compilazione? – Nikhil

Problemi correlati