2012-02-09 32 views
5

Google có sử dụng dấu thời gian sửa đổi hay không và kiểm tra xem liệu nội dung thực tế đã thay đổi chưa (ví dụ: bằng cách so sánh tổng kiểm tra)?Làm thế nào để MS Visual Studio xác định rằng tệp nguồn đã thay đổi?

Chỉnh sửa: Tôi cần biết điều này vì tôi sử dụng Git để kiểm soát nguồn và thường xuyên thay đổi nhánh. Dường như đôi khi tôi thay đổi nhánh và lực (ví dụ: từ phát triển thành chính và sau đó quay lại phát triển), VS xây dựng lại một nửa tệp nguồn. Tôi tự hỏi tại sao điều này xảy ra và tại sao nó xảy ra đôi khi và không xảy ra vào những lúc khác.

+0

Phiên bản nào của VS này? Ngôn ngữ của bạn đang sử dụng là gì? –

+0

@ConradFrix VS2008, C++. –

+5

Việc bỏ phiếu cho các công cụ lập trình gần đó là [về chủ đề] (http://www.stackoverflow.com/faq) trên SO :) –

Trả lời

5

Vì Visual Studio là một dự án nguồn đóng, tôi đặt cược chỉ các nhà phát triển mới có thể đưa ra câu trả lời rõ ràng về cách hoạt động chính xác của nó. Tuy nhiên, với mục đích của tôi, nó đủ để kiểm tra một số kịch bản.

Tôi đã thử nghiệm nó bằng một giải pháp nhỏ và một vài tệp trong đó (một tiêu đề và hai tệp nguồn). Kết quả kiểm tra mang lại kết luận sau. Visual Studio tìm kiếm ngày sửa đổi và thời gian. Ngay cả khi nội dung tập tin là như nhau - nó biên dịch tập tin này và cũng bất kỳ tập tin khác bao gồm nó. Nếu ngày và giờ sửa đổi giống nhau - nó sẽ không biên dịch lại ngay cả khi nội dung khác. Visual Studio bỏ qua ngày và giờ tạo và truy cập.

+0

Tuyệt vời để biết! –

+0

Tôi đã thực hiện một số thử nghiệm của riêng mình vì tôi muốn biết liệu nó có giữ được thời gian sửa đổi * cho mỗi tệp * hay * cho mỗi bản dựng * hay không. Nó xuất hiện từ thử nghiệm của tôi nó chỉ giữ thời gian xây dựng cuối cùng, sau đó so sánh với thời gian sửa đổi cuối cùng của một tập tin. Vì vậy, nó sẽ chỉ biên dịch lại nếu thời gian sửa đổi của tập tin tiến qua thời gian xây dựng cuối cùng. Ngay cả khi nó tiến bộ nhưng không đủ, nó sẽ không biên dịch lại. –

2

Tôi đoán nó sử dụng FileSystemWatcher trên thư mục dự án và tệp được liên kết (nếu có), chỉ vì đó là cách phù hợp để thực hiện loại điều này.

Một số googling thấy để biết thêm về lớp này (hoặc chỉ cần nhìn nó lên bản thân):

Tất nhiên khi tập tin nguồn mở, đó là nội dung bởi thời gian chỉnh sửa, như wel như bất kỳ thay đổi người dùng (thậm chí không được lưu) được tải trong RAM, nhưng nó không so sánh nó với nội dung đĩa (có thể quá chậm), nó lắng nghe một sự kiện hệ thống khi hệ thống cho biết tệp đã thay đổi.

Cập nhật:

Có lẽ không phải là lớp itslf, nhưng phiên bản Win32 của nó, bạn biết hầu hết các lớp chức năng NET hệ thống liên quan chỉ là Win32 giấy gói.

Từ câu trả lời StackOverflow này: How does FileSystemWatcher work on another computers directory?
Tôi nghĩ rằng nó kết thúc tốt đẹp API này (không chắc chắn): http://msdn.microsoft.com/en-us/library/aa365465.aspx

Cập nhật 2:

Đây là cách tiếp cận của Microsoft để theo dõi những thay đổi tập tin:
http://msdn.microsoft.com/en-us/library/chzww271(v=vs.80).aspx

Cập nhật 3

Đây là câu trả lời cũ, và nó đã được đề cập ở trên rằng đó là một đoán, như Visual Studio là nguồn đóng như đã đề cập trong câu trả lời khác. Điều đáng nói đến là câu trả lời được chấp nhận cho thấy Visual Studio tìm kiếm ngày sửa đổi tệp, điều này cho thấy nó không sử dụng cách tiếp cận được đoán trong câu trả lời này và rằng đó là sai.

Tôi hy vọng người đọc không quan tâm đến nỗ lực đưa ra hợp lý hóa khả năng trong câu trả lời này (gây khó chịu cho người đọc hoặc bỏ phiếu). Giữ nó chỉ vì lý do lưu trữ.

+1

Không phải VS chủ yếu là Win32, ngoài các thành phần giao diện người dùng WPF 2010? –

+0

Đúng, chỉ đang nghĩ về cách tiếp cận nói chung. Và ngay cả lớp .NET này cũng giống như một trình bao bọc Win32. Áp dụng ghi chú để đăng cập nhật. – Meligy

+0

Câu trả lời này minh họa chính nó tại sao các câu hỏi yêu cầu đầu cơ không mang tính xây dựng ... điểm của * đoán * những gì VS sử dụng để làm điều này? –

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