Cập nhật: Một dự án mẫu tái tạo lỗi này có thể được tìm thấy ở đây tại Microsoft Connect . Tôi cũng đã thử nghiệm và xác minh rằng giải pháp được đưa ra trong câu trả lời được chấp nhận dưới đây hoạt động trên dự án mẫu đó. Nếu giải pháp này không phù hợp với bạn, có lẽ bạn đang gặp vấn đề khác (thuộc về một câu hỏi riêng).
Đây là một câu hỏi được hỏi trước đó, cả ở đây trên Stack Overflow và những nơi khác, nhưng không có gợi ý nào tôi tìm thấy cho đến nay đã giúp tôi, vì vậy tôi chỉ cần thử hỏi một câu hỏi mới.
Kịch bản: Tôi có một ứng dụng Windows Forms đơn giản (C #, .NET 4.0, Visual Studio 2010). Nó có một vài biểu mẫu cơ sở mà hầu hết các biểu mẫu khác thừa hưởng từ nó, nó sử dụng Entity Framework (và các lớp POCO) để truy cập cơ sở dữ liệu. Không có gì lạ mắt, không đa luồng hoặc bất cứ điều gì.
Vấn đề: Tất cả đều ổn trong một thời gian. Sau đó, tất cả hoàn toàn bất ngờ, Visual Studio đã thất bại trong việc xây dựng khi tôi chuẩn bị khởi chạy ứng dụng. Tôi nhận được cảnh báo "Không thể xóa tệp '... bin \ Debug \ [ProjectName] .exe'. Truy cập vào đường dẫn '... bin \ Debug \ [ProjectName] .exe' bị từ chối." và lỗi "Không thể sao chép tệp 'obj \ x86 \ Debug \ [ProjectName] .exe' thành 'bin \ Debug \ [ProjectName] .exe'. Quá trình không thể truy cập tệp 'bin \ Debug \ [ProjectName] .exe 'bởi vì nó đang được sử dụng bởi một quy trình khác. " (Tôi nhận được cả cảnh báo và lỗi khi chạy Rebuild, nhưng chỉ có lỗi khi chạy Build - không nghĩ rằng điều đó có liên quan?)
Tôi hiểu hoàn toàn tốt những gì thông báo cảnh báo và lỗi nói: Visual Studio rõ ràng đang cố gắng ghi đè tệp exe trong khi nó đồng thời có khóa trên đó vì một số lý do. Tuy nhiên, điều này không giúp tôi tìm ra giải pháp cho vấn đề ... Điều duy nhất tôi thấy làm việc là tắt Visual Studio và khởi động lại. Xây dựng và khởi chạy sau đó hoạt động, cho đến khi tôi thực hiện thay đổi trong một số biểu mẫu, sau đó tôi lại gặp vấn đề tương tự và phải khởi động lại ... Khá là bực bội!
Như tôi đã đề cập ở trên, đây dường như là một vấn đề đã biết, vì vậy có rất nhiều giải pháp được đề xuất. Tôi sẽ chỉ liệt kê những gì tôi đã thử ở đây, vì vậy mọi người biết những gì cần bỏ qua:
- Tạo một giải pháp sạch mới và chỉ cần sao chép các tệp từ giải pháp cũ.
Thêm phần sau vào phần sau vào sự kiện xây dựng trước của dự án:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Thêm phần sau vào thuộc tính dự án (tệp .csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Tuy nhiên, không ai trong số họ làm việc cho tôi, vì vậy bạn có thể thấy lý do tại sao tôi bắt đầu hơi thất vọng. Tôi không biết nơi nào khác để tìm, vì vậy tôi hy vọng ai đó có thứ gì đó để cho tôi! Đây có phải là một lỗi trong VS không, và nếu vậy thì có một bản vá? Hoặc tôi đã làm điều gì sai, tôi có một tài liệu tham khảo tròn hoặc tương tự, và nếu vậy làm thế nào tôi có thể tìm ra?
Mọi góp ý đều được đánh giá cao :)
Cập nhật: Như đã đề cập trong bình luận bên dưới, tôi cũng đã kiểm tra bằng Process Explorer rằng đó thực sự là Visual Studio đang khóa tệp.