2011-08-08 13 views
10

MSBuild phát ra thông báo sau cho các mục tiêu cập nhật:Làm thế nào để MSBuild kiểm tra xem một mục tiêu có được cập nhật hay không?

Skipping target "MyTarget" because all output files are up-to-date with respect to the input files. 

Kiểm tra thực tế được thực hiện như thế nào?

+0

Bạn đang nói về nhiệm vụ Sao chép và tham số SkipUnchangedFiles? – sll

+0

Tôi đang nói về Mục tiêu, không phải là tác vụ Sao chép – sergtk

Trả lời

9

Kiểm tra dòng chảy của Incremental Build:

Một yếu tố mục tiêu có thể có cả hai thuộc tính đầu vào, mà chỉ ra gì mục tiêu> hy vọng như là đầu vào, và một thuộc tính đầu ra, mà chỉ những gì mục nó tạo ra như output MSBuild cố gắng tìm một ánh xạ 1 đến 1 giữa các giá trị của các thuộc tính này. Nếu bản đồ 1 đến 1 tồn tại, MSBuild so sánh dấu thời gian của mọi mục nhập với dấu thời gian của mục đầu ra tương ứng. Các tệp đầu ra không có ánh xạ 1-to-1 được so sánh với tất cả các tệp đầu vào. Một mục được coi là được cập nhật nếu tệp đầu ra của nó bằng hoặc lớn hơn tệp nhập tệp hoặc tệp của nó.

Nếu tất cả các mục đầu ra đều được cập nhật, MSBuild sẽ bỏ qua mục tiêu. xây dựng gia tăng của mục tiêu có thể cải thiện đáng kể tốc độ xây dựng . Nếu chỉ có một số tệp được cập nhật, MSBuild sẽ thực hiện mục tiêu nhưng bỏ qua các mục cập nhật và do đó, sẽ cung cấp tất cả các mục được cập nhật. Điều này được gọi là một phần tăng dần.

+0

Cảm ơn! Điều này có nghĩa rằng msbuild có một số dữ liệu bộ nhớ cache với dấu thời gian? – sergtk

+1

Tôi tin rằng trong khi MSBuild thực hiện kiểm tra, nó có thể tồn tại một số cấu trúc dữ liệu đại diện cho một danh sách các tập tin có dấu thời gian, nhưng không chắc chắn nó giữ được bao lâu trong bộ nhớ vì nó chỉ có ý nghĩa đối với cặp thư mục In && Out cụ thể – sll

+1

@sergtk: các tập tin đọc & ghi vào (cũng như các dòng lệnh có liên quan) trong việc theo dõi các tệp nhật ký ("tlog"). Bạn có thể thấy chúng trong thư mục trung gian. Dấu thời gian không được lưu - như được trích dẫn bởi sll, nếu đầu vào được cập nhật nhiều hơn đầu ra thì đầu ra được biên dịch lại, vì vậy tất cả những gì cần làm là kiểm tra biểu đồ phụ thuộc. (Cá nhân tôi đã có thể ưa thích các dấu thời gian được lưu lại, bởi vì nó sẽ cắt giảm các trường hợp góc, nhưng than ôi ...) – Cameron

6

MSBuild so sánh dấu thời gian tệp đầu vào và đầu ra để xác định xem tệp có được cập nhật hay không. Xem Incremental Builds để biết chi tiết.