2009-05-14 16 views
5

MSBuild'de Dosyaları bir konumdan diğerine kopyalamak için Copy görevini kullanabilirim.MSBuild: Dosyaları kopyala (değiştirildiyse) ve sonra da bir işlem yapın (yalnızca dosyalar güncelleştirildiyse)

Ayrıca, değiştirilmediyse dosyaların kopyalanmaması gerektiğini belirtmek için SkipUnchangedFiles özelliğini de kullanabilirim.

Bir veya daha fazla dosyanın kopyalanması koşuluyla, izleme eylemini tahmin etmek için standart bir desen var mı?

Örneğin

: ve komut bir veya daha fazla değişmiş yalnızca eğer

  1. Kopya herhangi güncellenmiş dağıtım komut
  2. , doğru sırayla, tüm dağıtım komut dosyalarını çalıştırır toplu dosyayı çalıştırın

bir başka komplikasyon dinamik girdi dosyalarının listesini oluşturmak için CreateItem görevi kullanıyorum olmasıdır:

<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> 

cevap

9

Bunu, MSBuild ile kutudan sağlanan incremental building ile yapabilirsiniz.

Sayed Ibrahim Haşimi

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

+1

Kitabınız MSBuild Dünya kuralları !!!!!! Bunu seviyorum! – Vaccano

+0

İyi fikir! Ancak, kopyalanacak dosyalarımın listesini dinamik olarak oluşturmak için CreateItem kullanıyorum. Bu durumda artımlı bina özelliğini kullanmak hala mümkün mü? (Soruma bir örnek proje ekledim.) –

+1

Evet bu hala mümkündür. Aslında oldukça kolay. Başka bir hedef, yani SourceFilesItems oluşturun ve CopyAndRun'un buna bağlı olmasını sağlayın. Daha sonra MSBuild CopyAndRun'unuza ulaştığında, ilk önce bağımlı hedefleri yürütecek ve bu işlemden sonra CopyAndRun gerçekten yürütüldüğünde başlatılacaktır. Sorun yaşamaya devam ederseniz, size somut bir örnek verebilirim. Sayed Ibrahim Hashimi –

İlgili konular