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:
- copiare qualsiasi script di distribuzione aggiornati
- 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>
Il tuo libro governa il mondo MSBuild !!!!!! Lo adoro! – Vaccano
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.) –
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 –