Błąd kompilacji: „Proces nie może uzyskać dostępu do pliku, ponieważ jest używany przez inny proces”

91

Mam webformsaplikację C # , która do dziś działała po prostu płynnie.

Teraz nagle, za każdym razem, gdy próbuję uruchomić aplikację, pojawia się błąd blokowania pliku:

Nie można skopiować pliku „obj \ Debug \ MyProject.exe” do „bin \ Debug \ MyProject.exe”. Proces nie może uzyskać dostępu do pliku „bin \ Debug \ MyProject.exe”, ponieważ jest używany przez inny proces.

Wygooglowanie błędu nie prowadzi do niczego poza oczywistym, tj. VS uważa, że ​​plik jest zablokowany. I zdecydowanie to Visual Studio blokuje plik, ponieważ kiedy zamykam VS i otwieram go ponownie, projekt wykonuje się dobrze - za pierwszym razem. Kiedy próbuję uruchomić go po raz drugi, pojawia się błąd blokowania pliku.

Zamykanie VS i ponowne otwieranie za każdym razem, gdy chcę uruchomić aplikację, nie jest wykonalnym obejściem! Jak dowiedzieć się, co blokuje plik, i zapobiec jego zablokowaniu?

EDYCJA: Kolejne interesujące odkrycie: nie muszę nawet uruchamiać aplikacji. Skompilowanie go tylko raz powoduje zablokowanie pliku; Nie mogę skompilować dwa razy z rzędu!

Ten problem jest specyficzny dla jednego projektu w moim rozwiązaniu. Wszystkie inne projekty działają dobrze i można je wykonywać tyle razy, ile chcę. Tylko ten jeden projekt zostaje zamknięty.

Shaul Behr
źródło
czy możesz spróbować zabić vshost.exe, aby zobaczyć, czy to pomoże?
odnowienie
@rene - nie ma procesu vshost.exe. Czy zmienili nazwę w VS 2010?
Shaul Behr
[nazwa aplikacji] .vshost.exe
Rene
@rene - Nie, nic pojawia się w obecnych procesach o tej nazwie
Szaul Behr
1
@Shaul czy dodałeś niestandardową kontrolę użytkownika do swojego formularza? spróbuj zamknąć projektanta przed uruchomieniem: stackoverflow.com/questions/2690119/ ...
odnów

Odpowiedzi:

135

Znalazłem proste rozwiązanie, które mi odpowiada. To wygląda tak:

Gdy wystąpi problem, po prostu zmień konfigurację budowania u góry (jeśli jest w „Wydanie” na „Debuguj” i odwrotnie), skompiluj, a następnie wróć do poprzedniej konfiguracji i ponownie zbuduj.

zrzut ekranu

Przypuszczam, że zmiana konfiguracji zwalnia vcshost i devenv.

Yechiel BD
źródło
2
Najlepsza odpowiedź, IMO. (Ach - dał sobie
kredyt
To świetne obejście! Chociaż czasami z jakiegoś powodu przestaje działać (?).
Christopher D. Emerson
3
@ChrisEmerson Też to zauważyłem. Mogę przełączyć się na wydanie, kompilację i uruchomienie aplikacji, ale nie mogę nawet skompilować projektu po powrocie do debugowania.
Zack
Skończyło się na tym, że musiałem ponownie uruchomić Visual Studio, aby pozbyć się zestawu. Próbowałem zresetować IIS i powyższe rozwiązanie, ale nadal widzę plik dll znajdujący się w folderze C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Weihui Guo
1
To zadziałało dokładnie raz i nigdy więcej. Nawet po ponownym uruchomieniu VS. Bez względu na to, jak bardzo przełączam się między wydaniem i debugowaniem, kończy się to niepowodzeniem.
Frank H.
24

Cóż, sam rozwiązałem problem - chociaż nadal nie mam pojęcia, dlaczego. Postanowiłem wyizolować problem, usuwając wszystkie pliki z projektu, a następnie ponownie je dodając i określając w ten sposób, który plik był źródłem moich problemów. Tak więc, jeden po drugim, ponownie wprowadzałem pliki do projektu, kompilowałem i czyściłem na każdym etapie ... aż ... dodałem ostatni ...

... i wszystko nadal działało dobrze.

Porównałem z kontrolą źródła mojego oryginalnego pliku .csproj; żadnych prawdziwych różnic. I nawet gdy próbowałem wrócić do poprzedniej wersji pliku .csproj, nadal działało.

Czarna magia. Jeśli to zadziała, czasami lepiej nie pytać dlaczego - po prostu zaakceptuj i przejdź dalej ...

EDYCJA: Problem powtarza się i wydaje mi się, że wyodrębniłem go, gdy w czasie kompilacji otwieram projektanta formularzy w postaci abstrakcyjnej / ogólnej.

Wyciągnięta lekcja: upewnij się, że projektant formularzy wszelkich abstrakcyjnych lub ogólnych formularzy lub kontrolek jest zamknięty przed kompilacją! Jeśli nie, musisz zamknąć VS i ponownie otworzyć!

Shaul Behr
źródło
1
Może dlatego, że żaden plik, który miał problem, nie był już uzyskiwany przez żaden proces, odkąd został usunięty. Usunięcie wszystkich plików POWINNO rozwiązać ten problem. Dobre myślenie.
Jeff LaFay
2
Nadal dzieje się tak z projektami tylko z wiersza poleceń (bez formularza), więc nie jestem pewien, czy naprawdę jesteś na czymś.
Zack
16

Odkryliśmy tutaj, co następuje: Na stronie właściwości projektu, na karcie Debuguj, usuń zaznaczenie opcji „Włącz proces hostingu Visual Studio”. Nie jestem pewien, do czego służy ta właściwość, ale działa po usunięciu zaznaczenia.

Yechiel BD
źródło
4
Rozwiązuje problem, ale Console.WriteLine () nie wyświetla już ciągów znaków w oknie Output.
Pierre Fournier
2
Problem nadal występuje po usunięciu zaznaczenia pola w aplikacji konsoli.
Zack
2
U mnie działa na projekcie klienta Windows. Odznacziłem to pole, zbudowałem pomyślnie, a następnie ponownie je sprawdziłem i pomyślnie zbudowałem.
Fei-Xue
1
nie działa dla mnie. Teraz sama aplikacja jest zablokowana. nie hosta aplikacji.
Borys Iwanow
9

Właściwie powinieneś zaznaczyć opcję „Włącz proces hostingu programu Visual Studio”. Przynajmniej dla VS2010. Mam też:

jeśli istnieje "$ (Ścieżka docelowa) .locked" del "$ (Ścieżka docelowa) .locked" jeśli istnieje "$ (Ścieżka docelowa)" jeśli nie istnieje "$ (Ścieżka Docelowa) .locked" move "$ (Ścieżka Docelowa)" "$ (Ścieżka Docelowa) .zablokowany"

w opcjach przed kompilacją. Ten problem nęka mnie od bardzo dawna i dopiero gdy John W. wspomniał o tym polu wyboru, zwróciłem nawet uwagę, że istnieje i jest niskie, i oto było już odznaczone.

Należy również zauważyć, że -app-vshost.exe działa w tle, nawet jeśli nie jest debugowane. I to sprawia, że ​​z powodzeniem buduje się i uruchamia za każdym razem. Wcześniej nie działało. Próbowałem też wyczyścić foldery debugowania i zwalniania oraz stale zmieniać typ docelowy i nic nie działało poza opisanymi powyżej. Wcześniej moim rozwiązaniem było odczekanie 5 minut między kompilacjami, co było bardzo denerwujące i czasochłonne, aby cokolwiek zrobić. Nie widziałem żadnej zmiany w zachowaniu, w którym liczyło się to, które karty są otwarte, XNA kontra okno lub projektanci są otwierani. Ten problem wystąpił w kompilacjach 32-bitowych lub 64-bitowych i nie miał znaczenia, czy zabiłem aplikację za pomocą ALT-F4, czy zabiłem ją za pomocą menedżera zadań, co teoretycznie nie pozwoliłoby aplikacji na zamknięcie lub zwolnienie zasobów. Na początku myślałem, że to kwestia usuwania śmieci.

Justin W.
źródło
Ten skrypt wydarzenia przed kompilacją w końcu rozwiązał ten problem - dzięki!
Christopher D. Emerson
To był jedyny komentarz, który kiedykolwiek zrobił dla mnie cokolwiek, nie mogłem uwierzyć, że tak prosty problem istniał przez lata bez łatek.
ConstantineK
7

VS2017 - rozwiązany przez zamknięcie wszystkich wystąpień programu MSBuild.exe w menedżerze zadań systemu Windows

lloyd
źródło
5

Trochę późno na odpowiedź, ale rozwiązuję ten problem, przechodząc do właściwości projektu> zakładka „Debuguj”> odznacz „Włącz proces hostingu Visual Studio”.

John Willemse
źródło
5

Pokonałem ten problem, zmieniając nazwę zablokowanego pliku (za pomocą Eksploratora Windows). Nie pozwolono mi usunąć pliku, ale zmiana nazwy zablokowanego pliku działa!

Ola Eldøy
źródło
To było jedyne rozwiązanie, które do tej pory zadziałało. Świetne rozwiązanie. Oszczędza mi kłopotów z ponownym uruchomieniem.
JHubbard80
Byłoby miło mieć to jako wersję wstępną. Zawsze mam ten problem! Tak denerwujące.
Shimmy Weitzhandler
4

Rozwiązałem to, usuwając folder bin \ Debug i prawdopodobnie ponownie uruchamiając VS

Johannes Wentu
źródło
Problem w tym, że nie możesz tego robić za każdym razem. U mnie błąd występuje za każdym razem, gdy odbudowuję, a następnie próbuję uruchomić aplikację.
FrenkyB
2

Dla mnie była to usługa Windows, która została zainstalowana i uruchomiona. Kiedy go zatrzymałem, kompilacja się powiodła.

Garrison Neely
źródło
2

Uruchom to polecenie z pola Uruchom:

net stop iisadmin /y

i wtedy

iisreset

pracował dla mnie. w porównaniu z 2003 r

toha
źródło
1

Niedawno napotkałem ten problem podczas próby zbudowania rozwiązania, nad którym pracuję (nie tylko projektu WinForms).
Oprócz buildniepowodzenia zauważyłem, że czyszczenie projektów po cichu kończyło się niepowodzeniem (sprawdzenie folderu bin pokazało, że pliki faktycznie nie zostały usunięte), a zamknięcie programu Visual Studio nie zakończyło devenvprocesu - raczej spowodowało awarię. Proces odzyskiwania systemu Windows ponownie uruchomiłby program Visual Studio.

Po kilku próbach i błędach stwierdziłem, że problemy przytrafiły mi się tylko wtedy, gdy otworzyłem rozwiązanie z menu „Ostatnie” podczas uruchamiania VS.
Otwieranie rozwiązania zFile >> Open >> Project/Solution okazało się, że działa jak zwykle.

Obecnie nie mam pojęcia dlaczego - będę dalej się tym zajmować, ale na razie przynajmniej mogę pracować!

Guy Passy
źródło
1

Po prostu sprawdź odniesienia i usuń odniesienie do projektu.

Wyjaśnienie: Mój problem zaczął się po utworzeniu kontrolki niestandardowej i przeciągnięciu jej i upuszczeniu na palecie przybornika w celu użycia jej w formularzach projektowych. Najpierw pojawiło się ostrzeżenie informujące, że istnieje nadmiarowość między niestandardowym plikiem źródłowym kontroli (.cs) a plikiem wykonywalnym projektu (.exe). Podczas wykonywania / debugowania pojawił się błąd: nie można uzyskać dostępu do (.exe), ponieważ jest używany (i to prawda).

Dosłownie usunąłem cały kod źródłowy dotyczący niestandardowej kontroli i problem nadal występował, dopóki nie sprawdziłem referencji i odwoływał się do siebie, aby móc uzyskać poprzednią niestandardową kontrolę. Usunąłem odniesienie i gotowe !!

David Silva-Barrera
źródło
1

Miałem ten sam problem z moją aplikacją Xamarin w programie Visual Studio i został on rozwiązany przez odłączenie testowego urządzenia mobilnego. Aplikacja została zamknięta, a debugger zatrzymany, ale błąd nadal występował podczas próby zbudowania lub odbudowania rozwiązania. Zatrzymał się dopiero po odłączeniu urządzenia, ponieważ musiałem odebrać połączenie.

Tomislav3008
źródło
1

Tylko po to, żeby dorzucić moje 2 centy. Mój problem został rozwiązany przez otwarcie Menedżera zadań i zabicie aplikacji. Działał w tle bez żadnego wskazania, że ​​w ogóle działa (brak pozycji na pasku zadań, brak interfejsu użytkownika, nic), ale nie jestem pewien, dlaczego tak się stało. Oczywiście debugger nie działał i miałem wtedy tylko jedną instancję VS. Zdumiewa mnie, że tak się dzieje nadal w tym VS 2017.

Być może mogę dodać krok kompilacji, który szuka aplikacji działającej w tle i zabija ją przed uruchomieniem nowej.

Benjamin McGill
źródło
1

Miałem ten sam problem i nie mogłem go naprawić za pomocą żadnej z metod wymienionych w poprzednich odpowiedziach. Rozwiązałem problem, zabijając wszystkie wystąpienia „Historia debugowania SSIS (32-bitowe)” w menedżerze zadań i teraz działam normalnie.

BM
źródło
1

Usunięcie folderu Obj, retail i debug projektu .NET i ponowne kompilowanie ponownie zadziałało.

Siddhant Gupta
źródło
0

Jak skonfigurowana jest Twoja aplikacja internetowa? Czy działa pod Cassini (serwer sieciowy zasobnika) lub IIS?

To nie powinno jednak zdarzyć się normalnie. Myślę, że ProcessExplorer może powiedzieć, jakie pliki zablokował proces. Jeśli nie, eksplorator procesu, jedno z pozostałych narzędzi sysinternals.

Jedną z rzeczy, które należy wypróbować przed pobraniem jednego z narzędzi SI, jest zatrzymanie serwera internetowego Cassini i sprawdzenie, czy to zwolni plik.

Andy
źródło
To nie jest aplikacja internetowa; to jest winforms.
Shaul Behr
3
Ach, więc możesz chcieć edytować swoje pytanie, zaczynając od „Mam aplikację C # webforms ...”
Andy
0

U mnie zadziałało ponowne uruchomienie usług IIS

Beanwah
źródło
0

ja też miałem ten sam problem. zmiana konfiguracji debugowania / wydania nie załatwiła sprawy. przynajmniej nie bez budowania pomiędzy.

w moim rozwiązaniu (winform) zostało to rozwiązane poprzez otwarcie w projektancie głównego formularza winform. przełączenie na kod (F7). Następnie zamykamy kod, zamykamy projektanta winform i przebudowujemy wszystko (ctrl-shift-B). To zadziałało dla mnie.

wygląda na to, że jakiś uchwyt z aplikacji winform (która uruchamia program w tle) nadal miał uchwyt do pliku w niektórych innych używanych bibliotekach.

Obelix
źródło
0

Miałem dwa wystąpienia Visual Studio, które otworzyły to samo rozwiązanie.

Janis S.
źródło
0

W moim przypadku działało kilka procesów vstest (o różnych nazwach, ale wszystkie zawierają ciąg vstest). Musiałem je zakończyć w taskmgr.

JT
źródło
0

Ten sam błąd rozwiązany przez aktualizację pakietów wsparcia Google Nuget

Gustavo Baiocchi Costa
źródło
0

Kiedy zakończyłem proces .Net Core Host, wszystko poszło dobrze. Nie musiałem zamykać programu Visual Studio ani niczego zmieniać.

slimeygecko
źródło
0

Dla tych, którzy rozwijają się w VS z Dockerem, uruchom ponownie Docker dla usługi Windows, a problem zostanie natychmiast rozwiązany.

Przed ponownym uruchomieniem dockera wypróbowałem wszystkie wymienione odpowiedzi, nie znalazłem uruchomionego procesu msbuild.exe, próbowałem również zrestartować VS bez skutku, działało tylko ponowne uruchomienie dockera.

Carlos
źródło
0

Jeszcze jedno rozwiązanie: kiedy pliki zostaną zablokowane, zgłaszany jest proces blokowania (coś w rodzaju „ServiceHub.Host.CLR.x64 (7764)”) z identyfikatorem w nawiasach. Aby pozbyć się tego procesu, otwórz PowerShell (x + Win + I) i wpisz: „Stop-Process -Id idNumber”.

TripleAccretion
źródło
0

Niedawno napotkałem problem podczas wdrażania w sieci szkieletowej usług. Błąd sugeruje, że „plik” jest używany, jednak okazało się, że port był używany przez inne IDE. Zatrzymując działającą usługę, która była już hostowana na porcie, mogłem zatrzymać ten wyjątek.

osoclever
źródło
0

Miałem ten sam problem. Wypróbowałem kilka rozwiązań wymienionych powyżej, ale nie działają one dla mnie.

Rozwiązałem ten problem, zamykając połączenie z Eksploratora serwera i zamykając wszystkie karty, które były otwarte w programie Visual Studio.

Jayesh Baviskar
źródło
0

Jeśli jest to projekt SSIS, otwórz menedżera zadań i zabij wszystkie wystąpienia DtsDebugHost.exe, które powinny zwolnić zablokowane pliki.

metabuddy
źródło
0

Używam Visual Studio Code i otrzymałem ten błąd, ponieważ serwer deweloperski był uruchomiony (uruchomiłem serwer deweloperski, naciskając Ctrl + F5).

Tak więc po prostu kliknąłem znak stop, aby go zatrzymać, a błąd zniknął.

Seif
źródło
0

Miałem ten problem (i to problem, który widziałem w innych miejscach, nie tylko VS).

Jest to spowodowane przez Dropbox (w moim przypadku). Po edycji kodu i uruchomieniu polecenia dropbox czasami natychmiast blokuje plik (aby mógł go przetworzyć).

Rozwiązanie 1. Po prostu naciśnij ponownie Uruchom

Rozwiązanie 2. Wstrzymaj skrzynkę referencyjną. (nie dobrze, jeśli używasz Dropbox jako kopii zapasowej w chmurze)

Rozwiązanie 3. Usuń folder kompilacji z listy synchronizacji skrzynek referencyjnych.

KevinLeeSmith
źródło