2015-08-21 36 views
11

Tôi có 3 C# dự án A, B và C. Cả tham chiếu A và B. C. Tham chiếu đến C từ A và B được đặt thành "Sao chép cục bộ" ngụ ý rằng sau khi C được tạo đến C.dll (trong thư mục đầu ra của C), nó được sao chép vào thư mục đầu ra của A hoặc B (tùy theo cái nào đang được biên dịch)Visual Studio 2015 khóa DLL trong khi gỡ lỗi

Tôi có 2 giải pháp, SA và SB. SA chứa A và C và SB chứa B và C. Tôi khởi chạy 2 thể hiện của Visual Studio 2015. Tôi mở SA trong một thể hiện và SB trong một trường hợp khác.

Tôi thấy rằng nếu tôi bắt đầu gỡ lỗi (F5) A từ SA, và sau đó (trong khi A vẫn đang gỡ lỗi), thực hiện thay đổi C từ SB và cố gắng biên dịch SB, tôi nhận được lỗi biên dịch nói rằng C .dll không thể được viết quá mức vì nó đang được sử dụng bởi một tiến trình khác (ví dụ của devenv.exe đang chạy SA).

Điều này không có ý nghĩa đối với tôi vì sau khi biên dịch C thành C.dll và sao chép vào thư mục đầu ra của A, Visual Studio nên phát hành khóa trên tệp.

Tôi đã xác minh (qua cửa sổ module trong SA) rằng phiên bản của C.dll nạp là một trong đó đã được sao chép vào thư mục đầu ra của A.

này bắt đầu xảy ra ngày hôm qua khi tôi bắt đầu sử dụng Visual Studio 2015 (thay vì Visual Studio 2013).

Có ai có ý tưởng nào không? Giải pháp hiện tại của tôi là chạy SA thông qua CTRL-F5 (bắt đầu mà không gỡ lỗi), nhưng điều này trở nên khó chịu khi tôi muốn chạy SA và SB trong chế độ gỡ lỗi cùng một lúc.

Cảm ơn.

CẬP NHẬT

tôi đã làm một số nghiên cứu về lý do tại sao "Edit, Continue" tính năng có thể gây ra các hành vi được mô tả, và theo trang này https://msdn.microsoft.com/en-us/library/ms164926.aspx> Edit, Continue cho phép một thực hiện sửa đổi mã nguồn trong khi ở một gỡ lỗi phiên và có kết quả có hiệu lực mà không dừng gỡ lỗi, biên dịch lại, và khởi động lại phiên gỡ lỗi (những gì một vấn đề gnarly phải có được). Với tính năng đó được kích hoạt, Visual Studio có thể được yêu cầu biên dịch lại bất kỳ DLL phụ thuộc vào bất kỳ lúc nào giải thích khóa.

+1

Quả cầu pha lê của tôi nói rằng đó thực sự là tệp PDB bị khóa. –

+0

Đề xuất thú vị, tuy nhiên lỗi biên dịch từ SB rõ ràng nói rằng đó là DLL bị khóa và cố gắng xóa tệp DLL khỏi trình khám phá cửa sổ không thành công. Có lẽ PDB cũng bị khóa (mặc dù nó được sao chép vào thư mục đầu ra của A cũng vậy). Dù bằng cách nào, tôi cảm thấy như nó đã được chuyển đổi từ VS2013 để VS2015 mà kết quả trong hành vi tôi nhìn thấy và tôi hy vọng có một cách để sửa chữa nó. Lỗi: Không thể mở 'C: \ BUILD \ C \ x86 \ obj \ Debug \ C.dll' để viết - 'Quá trình không thể truy cập tệp' C: \ BUILD \ C \ x86 \ obj \ Debug \ C .dll 'bởi vì nó đang được sử dụng bởi một quá trình khác.' – Shea

Trả lời

19

Tôi gặp vấn đề tương tự. Tôi đã thay đổi các thiết lập VS2015 của tôi và có vẻ như vấn đề đã biến mất:

  • tàn tật Options \ Debugging \ Chỉnh sửa và tiếp tục
  • -Options \ Sourcecodemanagement từ TFS để none-
  • -disabled Options \ Debugging \ Diagnostictools trong khi gỡ lỗi-

Không chắc chắn ai đã gây ra khóa nhưng tôi nghi ngờ chẩn đoán mà tôi không có trong VS2013. (Các thiết lập tên tôi dịch từ tiếng Đức sang tiếng Anh, không biết nếu nó là chính xác cách thức chúng được gọi bằng tiếng Anh VS phiên bản.)

Edit: Như nghiên cứu của Shea đó là Edit-và- Tiếp tục tính năng đã khóa DLL.

+0

Cảm ơn bạn! Vô hiệu hóa "Tùy chọn \ Gỡ lỗi \ Chỉnh sửa và tiếp tục" đã khắc phục sự cố cho tôi. – Shea

+0

không có cài đặt có tên "Chỉnh sửa và tiếp tục" trong VS2015 cho tôi! – JerryGoyal

+1

@JerryGoyal Không phải khi bạn tìm kiếm nó thông qua Quick Launch (họ chắc chắn nên sửa lỗi đó) nhưng bạn có thể tìm thấy nó nếu bạn mở Debugging. –

0

Tôi đã gặp vấn đề tương tự và không có giải pháp được đề xuất nào khác mà tôi gặp phải trong khi tìm kiếm các mạng nội bộ hoạt động cho tôi.Cuối cùng sau khi "sửa chữa" Visual Studio 2015 Enterprise, tôi đã thử khởi chạy Visual Studio ở chế độ an toàn: devenv.exe/SafeMode

Ở chế độ an toàn tôi đã có thể xây dựng giải pháp của mình và khi tôi bắt đầu lại mà không cần chuyển đổi, tôi đã được chuẩn bị để tắt các phần mở rộng từng cái một cho đến khi tôi tìm ra cái nào là thủ phạm. May mắn thay, điều đó là không cần thiết và các bản dựng tiếp theo đã biến mất mà không có sự cản trở nào.

2

trong trường hợp của tôi, đây là "Panda miễn phí Antivirus" Ai đang xem trên dll của dự án "C" và điều này gây ra lỗi: "quy trình không thể truy cập tệp vì nó đang được sử dụng bởi một quá trình khác"

+0

Tôi đã có cùng một vấn đề trong khi gỡ lỗi ứng dụng web C# và vô hiệu hóa "Panda miễn phí Antivirus" giải quyết nó –

0

Trong trường hợp của tôi, tệp .pdb đã bị khóa. Điều này không giống như việc .exe bị khóa vì nó phải là khi gỡ lỗi.

Giả sử nó chỉ là .pdb, chỉ cần di chuyển nó vào thư mục mới (tôi đã kéo và thả). Kỳ lạ thay, nó không thể bị xóa, nhưng nó chắc chắn nhất có thể được di chuyển! Khi tệp .pdb đã biến mất, hội đồng có thể biên dịch lại.

Giải pháp thay thế (và có lẽ là thuận tiện nhất) liên quan đến việc đóng hoàn toàn dự án, sau đó mở lại (tệp .pdb mở khóa kỳ diệu!).

Chỉnh sửa: Sau lần thứ hai, di chuyển tệp không hoạt động; nó xuất hiện khởi động lại dự án là cách đáng tin cậy duy nhất để đi.

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