Lỗi bản dựng: "Quy trình không thể truy cập tệp vì nó đang được sử dụng bởi một quy trình khác"


91

Tôi đã có một webformsứng dụng C # , ứng dụng đó cho đến hôm nay vẫn hoạt động bình thường.

Hôm nay, đột nhiên, mỗi khi tôi thử chạy ứng dụng, tôi gặp lỗi khóa tệp:

Không thể sao chép tệp "obj \ Debug \ MyProject.exe" sang "bin \ Debug \ MyProject.exe". Quá trình không thể truy cập tệp "bin \ Debug \ MyProject.exe" vì nó đang được sử dụng bởi một quá trình khác.

Googling lỗi không xuất hiện bất cứ điều gì vượt quá rõ ràng, tức là VS cho rằng tệp đã bị khóa. Và chắc chắn chính Visual Studio đã khóa tệp, vì khi tôi đóng VS và mở lại nó, dự án thực thi tốt - lần đầu tiên. Khi tôi cố gắng chạy nó lần thứ hai, tôi gặp lỗi khóa tệp.

Đóng VS và mở lại mỗi khi tôi muốn chạy ứng dụng không phải là một giải pháp khả thi! Làm cách nào để tìm ra thứ gì đang khóa tệp và ngăn nó bị khóa?

CHỈNH SỬA: Một khám phá thú vị khác: Tôi thậm chí không phải chạy ứng dụng. Chỉ cần biên dịch nó một lần sẽ khiến tệp bị khóa; Tôi không thể biên dịch hai lần liên tiếp!

Vấn đề này là cụ thể cho một dự án trong giải pháp của tôi. Tất cả các dự án khác hoạt động tốt và có thể được thực hiện bao nhiêu lần tùy thích. Chỉ có một dự án này tự bị khóa.


bạn có thể thử diệt vshost.exe để xem có giúp được không?
René

@rene - không có quy trình vshost.exe. Họ đã đổi tên nó trong VS 2010?
Shaul Behr

[Tên của bạn ứng dụng] .vshost.exe
rene

@rene - không, không có gì hiển thị trong các quy trình hiện tại có tên đó
Shaul Behr 27/02

1
@Shaul bạn đã thêm điều khiển người dùng tùy chỉnh vào biểu mẫu của mình chưa? hãy thử đóng các nhà thiết kế trước khi chạy: stackoverflow.com/questions/2690119/...
rene

Câu trả lời:


135

Tôi đã tìm thấy một giải pháp đơn giản phù hợp với tôi. Nó diễn ra như thế này:

Khi sự cố xảy ra, chỉ cần thay đổi cấu hình xây dựng ở trên cùng (nếu trong “Phát hành” thành “Gỡ lỗi” và ngược lại), xây dựng và sau đó thay đổi lại cấu hình trước đó và xây dựng lại.

ảnh chụp màn hình

Tôi cho rằng việc thay đổi cấu hình sẽ giải phóng vcshost và devenv.


2
Câu trả lời hay nhất, IMO. (À- anh ấy đã tự cho mình tín nhiệm.)
Jason P Sallinger

Đây là một giải pháp tuyệt vời! Mặc dù đôi khi nó ngừng hoạt động vì một số lý do (?).
Christopher D. Emerson

3
@ChrisEmerson Tôi cũng nhận thấy điều đó. Tôi có thể chuyển sang Phát hành và xây dựng và chạy ứng dụng, nhưng thậm chí không thể xây dựng dự án sau khi chuyển về Gỡ lỗi.
Zack

Cuối cùng tôi phải khởi động lại Visual Studio để thoát khỏi lắp ráp. Tôi đã cố gắng đặt lại IIS và giải pháp ở trên nhưng tôi vẫn có thể thấy tệp dll nằm trong thư mục C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Weihui Guo

1
Nó đã làm việc chính xác một lần, sau đó không bao giờ nữa. Ngay cả sau khi khởi động lại VS. Bất kể tôi chuyển đổi giữa Phát hành và Gỡ lỗi bao nhiêu, nó vẫn không thành công.
Frank H.

24

Chà, tôi đã tự giải quyết vấn đề - mặc dù tôi vẫn không biết tại sao. Tôi đã quyết định cô lập vấn đề bằng cách xóa tất cả các tệp khỏi dự án, sau đó thêm lại chúng và xác định xem tệp nào là nguồn gốc gây ra rắc rối của tôi. Vì vậy, lần lượt tôi đã giới thiệu lại các tệp cho dự án, biên dịch và làm sạch từng bước ... cho đến khi ... tôi thêm lần cuối cùng ...

... và mọi thứ vẫn hoạt động tốt.

Tôi đã so sánh với kiểm soát nguồn của .csproj ban đầu của tôi; không có sự khác biệt thực sự. Và ngay cả khi tôi đã thử hoàn nguyên về phiên bản .csproj trước đó, nó vẫn hoạt động.

Ma thuật đen. Nếu nó hoạt động, đôi khi tốt hơn là không hỏi tại sao - chỉ cần chấp nhận nó và tiếp tục ...

CHỈNH SỬA: Vấn đề là một vấn đề lặp lại và tôi tin rằng tôi đã cách ly nó khi tôi mở trình thiết kế biểu mẫu của một biểu mẫu trừu tượng / chung tại thời điểm biên dịch.

Bài học kinh nghiệm: Đảm bảo rằng Trình thiết kế biểu mẫu của mọi biểu mẫu hoặc điều khiển trừu tượng hoặc chung chung được đóng trước khi bạn biên dịch! Nếu không, bạn phải đóng VS và mở lại!


1
Có thể là do bất kỳ tệp nào gặp sự cố không được truy cập bởi bất kỳ quy trình nào nữa kể từ khi nó bị xóa. Xóa tất cả các tệp NÊN giải quyết được điều đó. Tư duy tốt.
Jeff LaFay

2
Điều này vẫn xảy ra với các dự án chỉ dòng lệnh (không có biểu mẫu), vì vậy tôi không chắc bạn đang thực sự làm gì.
Zack

16

Những gì chúng tôi đã phát hiện ra ở đây, như sau: Trong trang thuộc tính dự án, tab Gỡ lỗi, bỏ chọn "Bật quy trình lưu trữ studio trực quan". Tôi không chắc thuộc tính này dùng để làm gì, nhưng nó hoạt động khi không được chọn.


4
Nó giải quyết được vấn đề nhưng Console.WriteLine () không còn xuất chuỗi trong cửa sổ Output nữa.
Pierre Fournier

2
Sự cố vẫn tiếp diễn sau khi bỏ chọn hộp trên ứng dụng bảng điều khiển.
Zack

2
Nó hoạt động cho tôi trên một dự án máy khách Windows. Tôi đã bỏ chọn hộp, tạo thành công, sau đó kiểm tra lại và tạo thành công lại.
Fei-Xue

1
không làm việc cho tôi. Ứng dụng hiện đã bị khóa. không phải ứng dụng lưu trữ.
Boris Ivanov

9

Trên thực tế, bạn nên chọn "Kích hoạt quá trình lưu trữ Visual Studio". Ít nhất cho VS2010 anyway. Và tôi cũng có:

nếu tồn tại "$ (TargetPath) .locked" del "$ (TargetPath) .locked" nếu tồn tại "$ (TargetPath)" nếu không tồn tại "$ (TargetPath) .locked" move "$ (TargetPath)" "$ (TargetPath) .locked "

trong các tùy chọn trước khi xây dựng. Vấn đề này đã đeo bám tôi trong một thời gian rất dài và cho đến khi John W. đề cập đến hộp kiểm này, tôi mới nhận thấy rằng nó tồn tại ở mức thấp và có thể là nó đã được bỏ chọn.

Cũng lưu ý rằng -app-vshost.exe chạy trong nền ngay cả khi không gỡ lỗi. Đó là điều khiến nó xây dựng và chạy thành công mỗi khi tôi đoán. Nó đã không chạy trước đây. Và tôi cũng đã thử dọn dẹp các thư mục gỡ lỗi và phát hành và thay đổi loại mục tiêu liên tục và không có gì hoạt động ngoại trừ như mô tả ở trên. Giải pháp của tôi trước đây là chỉ đợi 5 phút giữa các lần xây dựng, điều này cực kỳ khó chịu và tốn thời gian để hoàn thành mọi việc. Tôi đã không thấy bất kỳ thay đổi nào trong hành vi mà nó quan trọng đối với những tab nào đang mở hoặc XNA so với biểu mẫu cửa sổ hoặc các nhà thiết kế được mở. Sự cố này xảy ra trong các bản dựng 32 bit hoặc 64 bit và không thành vấn đề nếu tôi giết ứng dụng bằng ALT-F4 hoặc giết ứng dụng đó bằng trình quản lý tác vụ, về lý thuyết, điều này sẽ không cho phép ứng dụng đóng hoặc giải phóng tài nguyên. Lúc đầu tôi nghĩ đó là vấn đề thu gom rác thải.


Kịch bản sự kiện tạo trước ở đây cuối cùng đã sửa lỗi này cho tôi - cảm ơn!
Christopher D. Emerson

Đây là nhận xét duy nhất đã từng làm cho tôi, tôi không thể tin được một vấn đề đơn giản như vậy lại tiếp tục tồn tại trong nhiều năm mà không có bản vá.
ConstantineK

7

VS2017 - Giải quyết bằng cách đóng tất cả các phiên bản của MSBuild.exe trong trình quản lý tác vụ windows


5

Hơi muộn đối với anwer, nhưng tôi giải quyết điều này bằng cách đi tới thuộc tính của dự án> tab "Gỡ lỗi"> bỏ chọn "Kích hoạt quá trình lưu trữ Visual Studio".


5

Tôi đã khắc phục sự cố này bằng cách đổi tên tệp bị khóa (sử dụng Windows Explorer). Tôi không được phép xóa tệp, nhưng việc đổi tên tệp bị khóa vẫn hoạt động!


Đây là giải pháp duy nhất đã làm việc cho tôi cho đến nay. Giải pháp tuyệt vời. Giúp tôi không gặp rắc rối khi khởi động lại.
JHubbard 80

Sẽ rất vui nếu có điều này dưới dạng bản dựng trước. Tôi luôn có vấn đề này! Rất khó chịu.
Shimmy Weitzhandler

4

Tôi đã giải quyết vấn đề này bằng cách xóa thư mục bin \ Debug và có thể khởi động lại VS


Vấn đề là bạn không thể làm điều này mọi lúc. Đối với tôi, lỗi xảy ra mỗi khi tôi xây dựng lại và sau đó cố chạy ứng dụng.
FrenkyB

2

Đối với tôi, đó là một Dịch vụ Windows đã được cài đặt và chạy. Một khi tôi dừng nó, việc xây dựng đã thành công.


2

Chạy lệnh này từ hộp Run:

net stop iisadmin /y

và sau đó

iisreset

đã làm cho tôi. so với năm 2003


1

Gần đây đã gặp sự cố này khi cố gắng xây dựng một giải pháp mà tôi đang làm việc (không chỉ là một proj winforms).
Ngoài việc buildthất bại, tôi nhận thấy rằng các dự án dọn dẹp sẽ lặng lẽ không thành công (kiểm tra thư mục bin cho thấy rằng các tệp chưa thực sự bị xóa) và việc đóng Visual Studio không kết thúc devenvquá trình - đúng hơn, nó khiến nó bị lỗi. Quá trình khôi phục Windows sau đó sẽ khởi động lại Visual Studio.

Sau một số thử nghiệm và sai sót, tôi nhận thấy sự cố chỉ xảy ra với tôi khi tôi mở giải pháp từ menu "Gần đây" khi khởi động VS.
Mở giải pháp từ File >> Open >> Project/Solutionthấy nó hoạt động như bình thường.

Hiện tại không biết tại sao - sẽ tiếp tục xem xét vấn đề này nhưng hiện tại, ít nhất tôi có thể làm việc!


1

Chỉ cần kiểm tra các tham chiếu và loại bỏ tự tham chiếu đến dự án.

Giải thích: Vấn đề của tôi bắt đầu sau khi tạo một điều khiển tùy chỉnh và kéo và thả nó vào bảng hộp công cụ để sử dụng nó trong các biểu mẫu thiết kế. Lần đầu tiên xuất hiện một cảnh báo nói rằng có sự dư thừa giữa tệp nguồn điều khiển tùy chỉnh (.cs) và các dự án có thể thực thi (.exe). Khi thực thi / gỡ lỗi xuất hiện lỗi: không thể truy cập (.exe) vì nó đang được sử dụng (và đó là sự thật).

Tôi thực sự đã xóa toàn bộ mã nguồn liên quan đến điều khiển tùy chỉnh và vấn đề vẫn còn, cho đến khi tôi kiểm tra các tham chiếu và nó đang tự tham chiếu để "có thể" lấy điều khiển tùy chỉnh cũ. Tôi đã xóa tài liệu tham khảo và thực hiện !!


1

Tôi đã gặp vấn đề tương tự trên ứng dụng Xamarin của mình trong studio trực quan và nó đã được giải quyết bằng cách rút thiết bị di động thử nghiệm của tôi. Ứng dụng đã được đóng và trình gỡ lỗi đã được dừng nhưng lỗi vẫn xảy ra khi cố gắng xây dựng hoặc xây dựng lại giải pháp. Nó chỉ dừng lại sau khi tôi rút phích cắm thiết bị vì tôi phải nhận cuộc gọi.


1

Chỉ để ném vào 2 xu của tôi. Vấn đề của tôi đã được giải quyết bằng cách mở Trình quản lý tác vụ và tắt ứng dụng. Nó đang chạy ở chế độ nền mà không có bất kỳ dấu hiệu nào cho thấy nó đang chạy (không có mục nào trong thanh tác vụ, không có ui, không có gì), nhưng tôi không chắc tại sao điều này lại xảy ra. Rõ ràng là trình gỡ lỗi không chạy và tôi chỉ có một phiên bản VS duy nhất được mở vào thời điểm đó. Tôi ngạc nhiên rằng điều này vẫn đang xảy ra trong VS 2017 này.

Có lẽ tôi có thể thêm một bước xây dựng tìm kiếm ứng dụng chạy nền và loại bỏ nó trước khi bắt đầu một bước mới.


1

Tôi đã gặp vấn đề tương tự và không thể khắc phục bằng cách sử dụng bất kỳ phương pháp nào được đề cập trong các câu trả lời trước. Tôi đã giải quyết sự cố bằng cách loại bỏ tất cả các phiên bản của "SSIS Debug Hist (32 bit)" trong trình quản lý tác vụ và hiện hoạt động như bình thường.


1

Tôi xóa thư mục obj, retail và debug của dự án .NET và xây dựng lại một lần nữa.


0

Ứng dụng web của bạn được định cấu hình như thế nào? Nó chạy dưới Cassini (máy chủ web khay) hoặc IIS?

Điều này không nên xảy ra bình thường. Tôi nghĩ ProcessExplorer có thể cho bạn biết những tệp nào mà một tiến trình đã khóa. Nếu không, trình thám hiểm xử lý một trong những công cụ sysinternals khác.

Một điều cần thử trước khi tải xuống một trong các công cụ SI là dừng máy chủ web Cassini và xem điều đó có giải phóng tệp hay không.


Nó không phải là một ứng dụng web; đó là winforms.
Shaul Behr

3
À, sau đó bạn có thể muốn chỉnh sửa câu hỏi của mình khi bắt đầu bằng "Tôi có một ứng dụng biểu mẫu web C # ..."
Andy


0

tôi cũng gặp vấn đề tương tự. thay đổi cấu hình gỡ lỗi / phát hành không thực hiện được thủ thuật. ít nhất là không nếu không xây dựng ở giữa.

trong giải pháp của tôi (winform) nó đã được giải quyết bằng cách mở mainform của winform trong trình thiết kế. chuyển sang mã (F7). Sau đó, đóng mã, đóng trình thiết kế của biểu mẫu win và xây dựng lại tất cả (ctrl-shift-B). Điều này đã làm việc cho tôi.

có vẻ như một số loại xử lý từ bên trong ứng dụng winform (chạy công cụ nền) vẫn có một trình xử lý tệp trên một số thư viện khác được sử dụng.


0

Tôi đã có hai trường hợp Visual Studio mở cùng một giải pháp.


0

Trong trường hợp của tôi, có một số quy trình vstest đang chạy (với nhiều tên khác nhau nhưng tất cả đều chứa vstest chuỗi). Tôi đã phải kết thúc chúng trong taskmgr.



0

Khi tôi kết thúc quá trình .Net Core Host, mọi thứ đều ổn. Tôi không phải đóng Visual Studio hoặc thay đổi bất kỳ điều gì khác.


0

Đối với những người đang phát triển trong VS với Docker, hãy khởi động lại docker cho dịch vụ windows và vấn đề sẽ được giải quyết ngay lập tức.

Trước khi khởi động lại docker, tôi đã thử tất cả các câu trả lời được đề cập, không tìm thấy tiến trình msbuild.exe đang chạy, cũng đã thử khởi động lại VS mà không có kết quả, chỉ khởi động lại docker hoạt động.


0

Một giải pháp khác: khi các tệp bị khóa, quá trình chặn sẽ được báo cáo (giống như "ServiceHub.Host.CLR.x64 (7764)") với id của nó trong dấu ngoặc đơn. Để thoát khỏi quá trình này, hãy mở PowerShell (x + Win + I) và nhập: "Stop-Process -Id idNumber".


0

Gần đây tôi đã gặp sự cố khi triển khai Service Fabric. Lỗi ngụ ý rằng một 'tệp' đang được sử dụng, tuy nhiên, tôi thấy rằng cổng đang được sử dụng bởi một IDE khác. Bằng cách dừng một dịch vụ đang chạy đã được lưu trữ trên cổng, tôi có thể ngăn ngoại lệ này xảy ra.


0

Tôi đã phải đối mặt với cùng một vấn đề. Tôi đã thử Một số giải pháp được liệt kê ở trên nhưng chúng không hiệu quả với tôi.

Tôi đã giải quyết vấn đề này bằng cách Đóng kết nối từ Trình khám phá máy chủ và đóng tất cả các Tab đang mở trong Visual Studio.


0

Nếu đây là một dự án SSIS, hãy mở trình quản lý tác vụ và hủy tất cả các phiên bản của DtsDebugHost.exe, điều này sẽ giải phóng các tệp bị khóa.


0

Tôi sử dụng Visual Studio Code và tôi nhận được lỗi này do máy chủ nhà phát triển đang chạy (tôi đã chạy máy chủ nhà phát triển bằng cách nhấn Ctrl + F5).

Vì vậy, tôi chỉ cần nhấp vào dấu hiệu dừng để dừng nó và lỗi đã biến mất.


0

Tôi đã gặp vấn đề này (và đó là vấn đề tôi đã gặp ở những nơi khác không chỉ VS).

Nó do Dropbox gây ra (trong trường hợp của tôi). Sau khi chỉnh sửa một số mã và nhấn chạy, đôi khi hộp kéo thả ngay lập tức khóa tệp (để nó có thể xử lý).

Giải pháp 1. Chỉ cần nhấn chạy lại

Giải pháp 2. Tạm dừng hộp kéo thả. (không tốt nếu bạn sử dụng dropbox làm bản sao lưu đám mây)

Giải pháp 3. Xóa thư mục xây dựng khỏi danh sách đồng bộ hộp kéo thả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.