2009-06-01 3 views
25

Tôi đang sử dụng phiên bản NUnit GUI và nó bắt đầu làm tôi khó chịu khi tôi có dự án thử nghiệm được tải trong đó để thử nghiệm mọi thứ. Nếu tôi thực hiện một thay đổi trong Visual Studio, và sau đó cố gắng xây dựng lại các giải pháp, nó ném lỗi "Không thể sao chép tập tin obj \ Debug \ foo.dll để bin \ Debug \ foo.dll. Quá trình không thể truy cập vào tệp bin \ Debug \ foo.dll vì nó đang được sử dụng bởi một tiến trình khác. "NUnit: "Quá trình không thể truy cập tệp ... vì nó đang được sử dụng bởi một tiến trình khác."

Đây là DLL tôi đã tải vào GUI, tất nhiên. Nó được sử dụng để được OK, và chỉ cần làm mới các tài liệu tham khảo dự án sau khi xây dựng, nhưng bây giờ nó có vẻ là ngăn chặn nó. Làm thế nào tôi có thể quay trở lại hành vi đó?

Tôi đã thử bật/tắt cài đặt sao chép bóng bằng cách này, với cùng một kết quả theo cách.

VS2008 SP1 và NUnit 2.4.8, nếu điều đó quan trọng.

Trả lời

37

đặn nó ra: "Volume Shadow Copy" dịch vụ đã được tắt đối với một số lý do. Biến nó trở lại, và mọi thứ trở lại bình thường.

+2

Cảm ơn bạn đã đăng bài sửa lỗi! –

+0

Đã có cùng một vấn đề, sửa chữa đã làm việc tuyệt vời! –

+0

Làm việc cho tôi - nhưng ai cũng có thể giải thích tại sao? Trên mặt của nó, dịch vụ Volume Shadow Copy sẽ không có gì để làm với quá trình xây dựng VS. –

1

Tôi cũng gặp vấn đề này, nhưng tôi đang cố gắng để tái tạo nó ngay hôm nay. Các diễn đàn dường như gợi ý rằng đó là do mã của bạn không trả lại tài nguyên mà nó đang sử dụng. Điều này rung chuông như tôi đã thử nghiệm một đầu đọc Xml khi tôi gặp vấn đề này.

Dưới đây là một liên kết tôi thấy on asp.net

+0

Thú vị. Tôi có một hội đồng kiểm tra (một trong những nó phàn nàn về) và một hội đồng riêng biệt mà nó được coi là thử nghiệm. Sự cố tài nguyên có nằm trong hội đồng kiểm tra không? Hoặc có thể một cái gì đó hội đồng kiểm tra đang truy cập trong hội đồng chính là không buông bỏ một nguồn tài nguyên. Hmm ... – Chris

+0

Không muốn gửi bạn đi theo một cuộc săn ngỗng hoang dã, nhưng tôi đã nghĩ rằng mã vi phạm sẽ nằm trong hội đồng bạn đang thử nghiệm thay vì lắp ráp thử nghiệm. Hãy tìm những thứ có sử dụng System.IO đặc biệt, họ có vẻ khá chậm trễ. –

+0

Tôi nghe ya. Điều thú vị là tôi có thể tải dự án NUnit từ đầu, và không chạy thử nghiệm đơn lẻ (có nghĩa là nó chưa tải mã của tôi ... tôi nghĩ), nó vẫn chặn IDE khỏi quá trình biên dịch. Tôi vẫn sẽ kiểm tra một số điều mặc dù, cảm ơn! – Chris

3

Tôi đã gặp vấn đề tương tự như được đề cập trong Câu hỏi. Tôi đã giải quyết nó trên máy của mình bằng cách sau:

  1. Trong Visual Studio> Solution Explorer> chọn dll gây ra sự cố> nhấp chuột phải> chọn thuộc tính. Sau hành động này, các thuộc tính File của dll bây giờ sẽ được hiển thị.
  2. Trong chế độ xem thuộc tính tệp của dll; đặt Sao chép vào thư mục đầu ra đến Sao chép nếu mới hơn.

Nếu bạn có Copy to Output mục như Sao chép luôn bạn sẽ nhận được lỗi biên dịch đề cập trong câu hỏi. Nếu bạn thực hiện thay đổi được đề cập ở trên, nó sẽ biến mất và dll của bạn sẽ vẫn được sao chép.

+0

Tốt bắt, ước gì tôi có thể đánh dấu hai là trả lời. – Chris

+1

Hmm, trong dự án của tôi, các thư mục bin/obj không được bao gồm trong dự án, vì vậy tùy chọn "Sao chép vào thư mục đầu ra" không thực sự có sẵn. VSS dường như không giúp được gì, có những lựa chọn nào khác không? – Shagglez

1

Tôi gặp vấn đề này và sau nhiều lần đọc và thử nghiệm, tôi nhận ra thủ phạm không thực sự là bất cứ điều gì trong NUnit hoặc mã của tôi. Đó là một thư viện khác mà tôi đang sử dụng, FakeItEasy, một khung đối tượng giả, đã không phát hành đúng tất cả các tài nguyên của nó.

Nếu bạn đang sử dụng FakeItEasy với NUnit và gặp sự cố này, hãy cân nhắc chuyển sang một khung đối tượng giả khác. Nếu bạn không sử dụng FakeItEasy, hoặc nếu loại bỏ nó khỏi dự án của bạn không sửa lỗi này, hãy kiểm kê tất cả thư viện của bên thứ ba mà bạn đang sử dụng từ mã thử nghiệm và xem xét xem có bất kỳ thư viện nào tương tự. Thay vào đó, hãy giả dụ người tạo NUnit phát hành rõ ràng bất kỳ tài nguyên nào được tổ chức bởi bất kỳ hội đồng kiểm tra nào mà nó tải, hoặc nếu bạn chủ động hơn tôi, hãy tận dụng thực tế rằng đó là một dự án mã nguồn mở và đóng góp một giải pháp thực hiện điều này.

2

tôi đã cùng một vấn đề:

Unable to copy file obj\Debug\foo.dll to bin\Debug\foo.dll. 
The process cannot access the file bin\Debug\foo.dll because it is being used by another process. 

Nguyên nhân trong trường hợp của tôi dường như là tôi đã sử dụng không gian tên tương tự ở hai quốc hội:

  1. MyNUnitTestLibrary 'bọc' các lớp học thử nghiệm trong " namespace ngân hàng {...}"
  2. 'NUnit Quick Start' cũng đã có tất cả mọi thứ bên trong "không gian tên ngân hàng {...}"

Thay đổi một trong các tên không gian tên đã khắc phục được sự cố. Tôi đã thực hiện một số thay đổi đối với cả hai hội đồng và được biên dịch lại mà không có lỗi

Lưu ý rằng cả hai hội đồng đều chứa thử nghiệm, khi tôi chơi với NUnit.

10

Tôi chỉ muốn thêm việc di chuyển tệp dự án Nunit đến vị trí giải pháp đã giải quyết được sự cố của tôi. Tôi không phải thay đổi bất kỳ thiết lập sao chép bóng nào trong nunit hoặc để bật dịch vụ sao chép bóng.

Xem ngăn xếp ngăn xếp - nunit locking dll

+2

BTW không nhất thiết phải có chúng trong cùng một thư mục. Cập nhật 'Project Base' trong các thiết lập dự án NUnit GUI để trỏ tới thư mục giải pháp thực hiện thủ thuật. Không cần Volume Shadow Copy – Kos

+0

+1 giải pháp này làm việc cho tôi khi câu trả lời được chấp nhận không. Cảm ơn bạn đã bổ sung. – Liath