2010-02-09 46 views
5

tôi có một giải pháp trong Visual Studio Express trông như thế này:Tại sao "Sao chép nếu mới hơn" không sao chép tệp khi tệp được cập nhật?

Lớp LogicSchema trong C# mà sẽ phân tích một tập tin XML xác định tại thời gian chạy. Sau đây là trong phương pháp main của Program.cs:

LogicSchema ls = new LogicSchema(
    XDocument.Load(
     "schemas\\C#Schema.xml", 
     LoadOptions.PreserveWhitespace)); 

tôi đã tạo một thư mục trong giải pháp của tôi gọi là "schemas" để lưu các tập tin XML và thiết lập các hành động xây dựng để Content và "Copy to Output Directory" giá trị là Sao chép nếu mới hơn.

Mong đợi của tôi là nếu mở tệp trong notepad, thực hiện thay đổi và lưu tệp, phiên bản cập nhật của tệp XML sẽ được sao chép vào thư mục ouput (trong trường hợp này là bin \ debug) khi tôi nhấn F5 . Tuy nhiên, tệp được cập nhật không được sao chép vào thư mục đầu ra trừ khi tôi chọn Rebuild. Thường xuyên Xây dựng không hoạt động.

Tôi cần thay đổi gì để khi nhấn F5, tệp được sao chép vào thư mục đầu ra khi nó được cập nhật?

Trả lời

2

Bạn đã thử đặt hành động xây dựng thành Không?

+0

cảm ơn đề xuất, nhưng điều đó dường như không hoạt động. –

+0

Tôi đã thử cùng một kịch bản trong VS2010 Beta 2 và nó hoạt động. Có vẻ như một lỗi trong ấn bản nhanh. – Ikaso

2

Có vẻ như để làm việc cũng trong Visual Studio 2008 Team System - phải edition Biểu hiện cụ thể, do đó không thể repro ...

OK, đoán ban đầu của tôi là không đúng sự thật - đó là về XML tệp đang ở trong thư viện được tham chiếu. Có thể repro nó ngay bây giờ.

Tôi nghĩ cách tự nhiên nhất là nhúng XML làm tài nguyên và sau đó đọc nó với GetManifestResourceStream(). Bằng cách này, tệp XML sẽ theo dll của bạn khi bạn tham khảo nó mà không sao chép nó một cách riêng biệt ngay cả khi bạn tham khảo dll trực tiếp và không thông qua tham chiếu dự án.

... hoặc sau đó bạn có thể sử dụng Sự kiện dựng trước? (Thuộc tính dự án - Sự kiện xây dựng):

copy $(ProjectDir)test.xml $(SolutiontDir)projectFolder\bin\debug\test.xml 

Tôi nghĩ rằng nó sẽ luôn chạy ngay cả khi VS cho rằng không có tệp nguồn nào thay đổi. Ít nhất là trong toàn bộ VS2008 đây là trường hợp - chỉ cần kiểm tra.

+0

Nó có thể có một cái gì đó để làm với thực tế là thư mục "lược đồ" là một phần của * LogicParser *, trong khi Program.cs, lớp mà từ đó 'LogicSchema' được khởi tạo, là trong * LogicParser.ConsoleApp *. –

+0

True: Tôi đã quá lười biếng để làm thư viện lớp riêng biệt khi tôi thử nghiệm này. Đã làm nó ngay bây giờ và nó sẽ xảy ra trong phiên bản đầy đủ của Visual Studio là tốt. Vì vậy, không phải phiên bản Expression cụ thể. Vì vậy, tôi cho rằng các tùy chọn của bạn là thêm sự kiện dựng sẵn với $ (SolutionDir) hoặc sau đó nhúng xml làm tài nguyên và đọc nó bằng GetManifestResourceStream(). Tôi nghĩ rằng sau này là tốt hơn - nếu bạn đang tạo một dll, nó sẽ đẹp hơn nếu bạn có thể sử dụng nó bằng cách tham chiếu nó mà không cần thêm các tệp (xml) khác. – Ope

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