2009-05-14 22 views
5

Trong MSBuild tôi có thể sử dụng tác vụ Copy để sao chép các tập tin từ vị trí này sang vị trí khác.MSBuild: Sao chép các tập tin (nếu thay đổi) và sau đó thực hiện một hành động (chỉ khi tập tin được cập nhật)

Tôi cũng có thể sử dụng thuộc tính SkipUnchangedFiles để chỉ định rằng các tệp không được sao chép nếu chúng không thay đổi.

Có mẫu chuẩn để dự đoán hành động tiếp theo với điều kiện là một hoặc nhiều tệp đã được sao chép không?

Ví dụ:

  1. Sao chép bất kỳ kịch bản triển khai cập nhật
  2. Khởi chạy tập tin thực thi mà chạy tất cả các kịch bản triển khai, theo đúng thứ tự, khi và chỉ khi một hoặc nhiều các kịch bản đã thay đổi

Một thêm biến chứng là tôi đang sử dụng nhiệm vụ CreateItem để tự động tạo ra các danh sách các tập tin đầu vào:

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

Trả lời

9

Bạn có thể đạt được điều này với incremental building được cung cấp ngoài hộp với MSBuild.

Sayed Ibrahim Hashimi

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

+1

cuốn sách của bạn cai quản MSBuild Thế Giới !!!!!! Tôi thích điều đó! – Vaccano

+0

Ý tưởng hay! Tuy nhiên, tôi đang sử dụng CreateItem để tự động tạo danh sách các tệp của tôi để sao chép. Vẫn có thể sử dụng tính năng xây dựng gia tăng trong trường hợp này? (Tôi đã thêm một dự án mẫu vào câu hỏi của tôi.) –

+1

Có điều này vẫn có thể. Khá dễ thực sự. Tạo một mục tiêu khác, tức là SourceFilesItems và làm cho CopyAndRun phụ thuộc vào mục tiêu đó. Sau đó, khi MSBuild được CopyAndRun của bạn, trước tiên nó sẽ thực hiện các mục tiêu phụ thuộc và sau đó việc tạo nhóm sẽ bắt đầu khi CopyAndRun thực sự được thực hiện. Nếu bạn tiếp tục gặp sự cố, tôi có thể cung cấp cho bạn một ví dụ cụ thể. Nói Ibrahim Hashimi –

Các vấn đề liên quan