2009-05-14 17 views
5

In MSBuild posso utilizzare l'attività Copy per copiare i file da una posizione a un'altra.MSBuild: copia i file (se modificati) e quindi esegui un'azione (solo se i file sono stati aggiornati)

Posso anche utilizzare la proprietà SkipUnchangedFiles per specificare che i file non devono essere copiati se non sono stati modificati.

Esiste uno schema standard per la previsione di un'azione di follow-up a condizione che uno o più file siano stati copiati?

Ad esempio:

  1. copiare qualsiasi script di distribuzione aggiornati
  2. eseguire il file batch che gestisce tutti gli script di distribuzione, nell'ordine corretto, se e solo se uno o più degli script sono cambiati

una complicazione ulteriore è che io sto usando il compito CreateItem per generare dinamicamente l'elenco dei file di input:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CopyAndRun"> 
    <Target Name="CopyAndRun"> 
    <CreateItem Include="In\**\*Test*.txt"> 
     <Output TaskParameter="Include" ItemName="SourceFiles"/> 
    </CreateItem> 
    <Copy SourceFiles="%(SourceFiles.Identity)" DestinationFolder="Out\%(RecursiveDir)" SkipUnchangedFiles="true" /> 
    <!-- Only want to execute this if updated files were copied --> 
    <Message Text="Running..." /> 
    </Target> 
</Project> 

risposta

9

È possibile ottenere ciò con incremental building fornito in dotazione con MSBuild.

Sayed Ibrahim Hashimi

My Book: Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

+1

Il tuo libro governa il mondo MSBuild !!!!!! Lo adoro! – Vaccano

+0

Buona idea! Tuttavia, sto usando CreateItem per generare dinamicamente il mio elenco di file da copiare. È ancora possibile utilizzare la funzione di costruzione incrementale in questo caso? (Ho aggiunto un esempio di progetto alla mia domanda.) –

+1

Sì, questo è ancora possibile. Abbastanza facile davvero. Crea un altro target, ad esempio SourceFilesItems, e fai in modo che CopyAndRun dipenda da quello. Quindi, quando MSBuild arriva al tuo CopyAndRun, eseguirà prima i target dipendenti e successivamente inizierà il batching quando CopyAndRun verrà effettivamente eseguito. Se continui ad avere problemi, posso fornirti un esempio concreto. Sayed Ibrahim Hashimi –

Problemi correlati