Erstellungsfehler: "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird."

88

Ich habe eine C # webforms-App, die bis heute nur schwimmend funktioniert hat.

Heute erhalte ich plötzlich jedes Mal, wenn ich versuche, die App auszuführen, einen Fehler beim Sperren von Dateien:

Datei "obj \ Debug \ MyProject.exe" kann nicht nach "bin \ Debug \ MyProject.exe" kopiert werden. Der Prozess kann nicht auf die Datei "bin \ Debug \ MyProject.exe" zugreifen, da sie von einem anderen Prozess verwendet wird.

Wenn Sie den Fehler googeln, wird nichts anderes als das Offensichtliche angezeigt, dh VS glaubt, dass die Datei gesperrt ist. Und es ist definitiv Visual Studio selbst, das die Datei sperrt, denn wenn ich VS schließe und wieder öffne, wird das Projekt beim ersten Mal einwandfrei ausgeführt. Wenn ich versuche, es ein zweites Mal auszuführen, wird der Fehler beim Sperren der Datei angezeigt.

Das Schließen von VS und das erneute Öffnen jedes Mal, wenn ich die App ausführen möchte, ist keine praktikable Problemumgehung! Wie finde ich heraus, was die Datei sperrt, und verhindere, dass sie gesperrt wird?

EDIT: Eine weitere interessante Entdeckung: Ich muss die App nicht einmal ausführen. Wenn Sie es nur einmal kompilieren, wird die Datei gesperrt. Ich kann nicht zweimal hintereinander kompilieren!

Dieses Problem ist spezifisch für ein Projekt in meiner Lösung. Alle anderen Projekte funktionieren einwandfrei und können so oft ausgeführt werden, wie ich möchte. Es ist nur dieses eine Projekt, das sich selbst einsperrt.

Shaul Behr
quelle
Kannst du versuchen, die vshost.exe zu töten, um zu sehen, ob das hilft?
Rene
@rene - Es gibt keinen vshost.exe-Prozess. Haben sie das in VS 2010 umbenannt?
Shaul Behr
[Name Ihrer App] .vshost.exe
rene
@rene - nein, nichts zeigt sich in den aktuellen Prozesse mit diesem Namen
Shaul Behr
1
@Shaul Haben Sie Ihrem Formular eine benutzerdefinierte Benutzersteuerung hinzugefügt? Versuchen Sie, den Designer vor dem Ausführen zu schließen: stackoverflow.com/questions/2690119/…
rene

Antworten:

133

Ich habe eine einfache Lösung gefunden, die für mich funktioniert. Es geht so:

Wenn das Problem auftritt, ändern Sie einfach die Gebäudekonfiguration oben (wenn in „Release“ in „Debug“ und umgekehrt), erstellen Sie und wechseln Sie dann zurück zur vorherigen Konfiguration und erstellen Sie erneut.

Bildschirmfoto

Ich nehme an, dass das Ändern der Konfiguration den vcshost und den devenv freigibt.

Yechiel BD
quelle
2
Beste Antwort, IMO. (Ah- er gab sich den Kredit.)
Jason P Sallinger
Dies ist eine großartige Problemumgehung! Obwohl es manchmal aus irgendeinem Grund nicht mehr funktioniert (?).
Christopher D. Emerson
3
@ ChrisEmerson Das habe ich auch bemerkt. Ich kann zu Release wechseln und die App erstellen und ausführen, aber ich kann das Projekt nicht einmal erstellen, nachdem ich wieder zu Debug gewechselt habe.
Zack
Am Ende musste ich Visual Studio neu starten, um die Assembly zu entfernen. Ich habe versucht, IIS und die obige Lösung zurückzusetzen, aber ich kann immer noch die DLL-Datei im Ordner C: \ Windows \ Microsoft.NET \ Assembly \ GAC_MSIL
Weihui Guo
1
Das hat genau einmal funktioniert, dann nie wieder. Nicht einmal nach dem Neustart von VS. Egal wie oft ich zwischen Release und Debug wechsle, es schlägt fehl.
Frank H.
24

Nun, ich habe das Problem selbst gelöst - obwohl ich immer noch keine Ahnung habe, warum. Ich beschloss, das Problem zu isolieren, indem ich alle Dateien aus dem Projekt entfernte, sie dann erneut hinzufügte und auf diese Weise feststellte, welche Datei die Ursache meiner Probleme war. Also habe ich nacheinander Dateien wieder in das Projekt eingeführt, jeden Schritt des Weges kompiliert und bereinigt ... bis ... ich den letzten hinzugefügt habe ...

... und alles hat noch gut funktioniert.

Ich habe einen Vergleich mit der Quellcodeverwaltung meiner ursprünglichen .csproj durchgeführt. Keine wirklichen Unterschiede. Und selbst als ich versuchte, zur vorherigen Version von .csproj zurückzukehren, funktionierte es immer noch.

Schwarze Magie. Wenn es funktioniert, ist es manchmal besser, nicht zu fragen, warum - akzeptieren Sie es einfach und fahren Sie fort ...

BEARBEITEN: Das Problem ist ein wiederkehrendes Problem, und ich glaube, ich habe es isoliert, wenn der Formular-Designer zur Kompilierungszeit ein abstraktes / generisches Formular geöffnet hat.

Lektion gelernt: Stellen Sie sicher, dass der Formular-Designer aller abstrakten oder generischen Formulare oder Steuerelemente geschlossen ist, bevor Sie kompilieren! Wenn nicht, müssen Sie VS schließen und erneut öffnen!

Shaul Behr
quelle
1
Vielleicht liegt es daran, dass auf die Datei, auf der das Problem aufgetreten ist, seit dem Entfernen kein Prozess mehr zugreift. Das Entfernen aller Dateien sollte das in der Tat lösen. Gute Idee.
Jeff LaFay
2
Dies geschieht immer noch nur über Kommandozeilenprojekte (kein Formular), daher bin ich mir nicht sicher, ob Sie wirklich mit irgendetwas fertig sind.
Zack
16

Was wir hier entdeckt haben, ist Folgendes: Deaktivieren Sie auf der Seite "Projekteigenschaften" auf der Registerkarte "Debuggen" das Kontrollkästchen "Visual Studio-Hosting-Prozess aktivieren". Ich bin mir nicht sicher, wofür diese Eigenschaft gedacht ist, aber sie erledigt die Arbeit, sobald sie deaktiviert ist.

Yechiel BD
quelle
4
Das Problem wird zwar behoben, aber Console.WriteLine () gibt keine Zeichenfolgen mehr im Ausgabefenster aus.
Pierre Fournier
2
Das Problem besteht weiterhin, nachdem das Kontrollkästchen in einer Konsolen-App deaktiviert wurde.
Zack
2
Es funktioniert für mich in einem Windows-Client-Projekt. Ich habe das Kontrollkästchen deaktiviert, erfolgreich erstellt und dann erneut aktiviert und erneut erfolgreich erstellt.
Fei-Xue
1
Ich arbeite nicht für mich. Jetzt ist die App selbst gesperrt. keine Host-App.
Boris Ivanov
9

Eigentlich sollten Sie "Visual Studio-Hosting-Prozess aktivieren" aktivieren. Zumindest für VS2010. Und ich habe auch:

falls vorhanden "$ (TargetPath) .locked" del "$ (TargetPath) .locked" falls vorhanden "$ (TargetPath)" falls nicht vorhanden "$ (TargetPath) .locked" move "$ (TargetPath)" "$ (TargetPath) .gesperrt"

in den Pre-Build-Optionen. Dieses Problem hat mich sehr lange verfolgt und erst als John W. dieses Kontrollkästchen erwähnte, bemerkte ich sogar, dass es existierte und niedrig war und siehe, es war bereits deaktiviert.

Beachten Sie auch, dass -app-vshost.exe im Hintergrund ausgeführt wird, auch wenn kein Debugging durchgeführt wird. Aus diesem Grund wird es jedes Mal erfolgreich erstellt und ausgeführt, wenn ich denke. Es lief vorher nicht. Außerdem habe ich versucht, die Debug- und Release-Ordner zu bereinigen und den Zieltyp ständig zu ändern, und nichts hat funktioniert, außer wie oben beschrieben. Meine vorherige Lösung bestand darin, zwischen den Builds nur 5 Minuten zu warten, was sehr nervig und zeitaufwändig wurde, um etwas zu erledigen. Ich habe keine Verhaltensänderung gesehen, bei der es darauf ankam, welche Registerkarten geöffnet waren oder XNA gegenüber Windows Forms oder Designern, die geöffnet wurden. Dieses Problem trat bei 32-Bit- oder 64-Bit-Builds auf und spielte keine Rolle, ob ich eine App mit ALT-F4 oder mit dem Task-Manager beendet habe, wodurch die App theoretisch keine Ressourcen schließen oder freigeben konnte. Zuerst dachte ich, es sei ein Problem mit der Speicherbereinigung.

Justin W.
quelle
Das vorgefertigte Ereignisskript hier hat dies endlich für mich behoben - danke!
Christopher D. Emerson
Dies war der einzige Kommentar, der jemals etwas für mich getan hat. Ich konnte nicht glauben, dass ein so einfaches Problem jahrelang ohne Patches bestand.
ConstantineK
6

VS2017 - Wird behoben, indem alle Instanzen von MSBuild.exe im Windows-Task-Manager geschlossen werden

lloyd
quelle
5

Etwas spät zu beantworten, aber ich löse dieses Problem, indem ich zu den Eigenschaften des Projekts gehe> Registerkarte "Debuggen"> Deaktivieren Sie "Visual Studio-Hosting-Prozess aktivieren".

John Willemse
quelle
4

Ich habe dieses Problem durch Umbenennen der gesperrten Datei (mit Windows Explorer) behoben. Ich durfte die Datei nicht löschen, aber das Umbenennen der gesperrten Datei funktioniert!

Ola Eldøy
quelle
Dies war die einzige Lösung, die bisher für mich funktioniert hat. Tolle Lösung. Spart mir die Mühe des Neustarts.
JHubbard80
Wäre schön, dies als Pre-Build zu haben. Ich habe dieses Problem immer! So nervig.
Shimmy Weitzhandler
4

Ich habe dieses Problem gelöst, indem ich den Ordner bin \ Debug gelöscht und möglicherweise VS neu gestartet habe

Johannes Wentu
quelle
Das Problem ist, dass Sie dies nicht jedes Mal tun können. Bei mir tritt jedes Mal ein Fehler auf, wenn ich neu erstelle und dann versuche, die App auszuführen.
FrenkyB
2

Für mich war es ein Windows-Dienst, der installiert wurde und ausgeführt wurde. Nachdem ich es gestoppt hatte, war der Build erfolgreich.

Garrison Neely
quelle
2

Führen Sie diesen Befehl im Feld Ausführen aus:

net stop iisadmin /y

und dann

iisreset

arbeitete für mich. vs 2003

toha
quelle
1

Ich bin kürzlich auf dieses Problem gestoßen, als ich versucht habe, eine Lösung zu erstellen, an der ich arbeite (nicht nur ein Winforms-Projekt).
Zusätzlich zum buildFehler bemerkte ich, dass Reinigungsprojekte stillschweigend fehlschlugen (das Überprüfen des bin-Ordners ergab, dass die Dateien nicht tatsächlich gelöscht wurden) und das Schließen von Visual Studio das nicht beendetedevenv Prozess nicht beendete, sondern zum Absturz führte. Der Windows-Wiederherstellungsprozess startet dann Visual Studio neu.

Nach einigem Ausprobieren stellte ich fest, dass die Probleme nur bei mir auftraten, als ich die Lösung beim Starten von VS über das Menü "Zuletzt verwendet" öffnete.
Wenn Sie die Lösung von File >> Open >> Project/Solutionöffnen, funktioniert sie wie gewohnt.

Derzeit keine Ahnung warum - werde mich weiter damit befassen, aber im Moment kann ich zumindest arbeiten!

Guy Passy
quelle
1

Überprüfen Sie einfach die Referenzen und entfernen Sie die Selbstreferenz zum Projekt.

Erläuterung: Mein Problem begann nach dem Erstellen eines benutzerdefinierten Steuerelements und dem Ziehen und Ablegen in die Toolbox-Palette, um es in Entwurfsformularen zu verwenden. Zuerst erschien eine Warnung, dass zwischen der Quelldatei des benutzerdefinierten Steuerelements (.cs) und der ausführbaren Projektdatei (.exe) eine Redundanz bestand. Beim Ausführen / Debuggen trat der Fehler auf: Zugriff auf die (.exe) nicht möglich, da sie verwendet wird (und es war wahr).

Ich habe buchstäblich den gesamten Quellcode bezüglich des benutzerdefinierten Steuerelements entfernt und das Problem blieb weiterhin bestehen, bis ich die Referenzen überprüft habe und es sich selbst referenzierte, um das frühere benutzerdefinierte Steuerelement "erhalten" zu können. Ich habe die Referenz entfernt und fertig !!

David Silva-Barrera
quelle
1

Ich hatte das gleiche Problem mit meiner Xamarin-Anwendung in Visual Studio und es wurde behoben, indem ich mein Test-Mobilgerät aussteckte. Die Anwendung wurde geschlossen und der Debugger gestoppt, aber der Fehler trat immer noch auf, wenn versucht wurde, die Lösung zu erstellen oder neu zu erstellen. Es hörte erst auf, nachdem ich das Gerät ausgesteckt hatte, weil ich einen Anruf erhalten musste.

Tomislav3008
quelle
1

Nur um meine 2 Cent hineinzuwerfen. Mein Problem wurde gelöst, indem der Task-Manager geöffnet und die Anwendung beendet wurde. Es wurde im Hintergrund ausgeführt, ohne dass darauf hingewiesen wurde, dass es überhaupt ausgeführt wurde (kein Element in der Taskleiste, keine Benutzeroberfläche, nichts), aber ich bin mir nicht sicher, warum dies passiert ist. Offensichtlich lief der Debugger nicht und ich hatte zu diesem Zeitpunkt nur eine einzige Instanz von VS geöffnet. Es wundert mich, dass dies in diesem VS 2017 immer noch passiert.

Vielleicht kann ich einen Build-Schritt hinzufügen, der nach der Anwendung sucht, auf der der Hintergrund ausgeführt wird, und sie beendet, bevor die neue gestartet wird.

Benjamin McGill
quelle
1

Ich hatte das gleiche Problem und konnte es mit keiner der in den vorherigen Antworten genannten Methoden beheben. Ich habe das Problem behoben, indem ich alle Instanzen von "SSIS Debug Hist (32 Bit)" im Task-Manager beendet habe und jetzt wie gewohnt arbeite.

BM
quelle
0

Wie ist Ihre Web-App konfiguriert? Läuft es unter Cassini (dem Tray-Webserver) oder IIS?

Dies sollte jedoch nicht normal geschehen. Ich denke, ProcessExplorer kann Ihnen sagen, welche Dateien ein Prozess gesperrt hat. Wenn nicht, verarbeiten Sie Explorer eines der anderen sysinternalen Tools.

Bevor Sie eines der SI-Tools herunterladen, sollten Sie versuchen, den Cassini-Webserver zu stoppen und zu prüfen, ob dadurch die Datei freigegeben wird.

Andy
quelle
Es ist keine Web-App. Es sind Winforms.
Shaul Behr
3
Ah, dann möchten Sie vielleicht Ihre Frage bearbeiten, wenn Sie mit "Ich habe eine C # Webforms-App ..." beginnen
Andy
0

Was für mich funktioniert hat, war der Neustart von IIS

Beanwah
quelle
0

Ich hatte das gleiche Problem auch. Das Ändern der Debug- / Release-Konfiguration hat nicht funktioniert. Zumindest nicht ohne dazwischen zu bauen.

In meiner Lösung (Winform) wurde es gelöst, indem die Hauptform der Winform im Designer geöffnet wurde. Umschalten auf Code (F7). Schließen Sie dann den Code, schließen Sie den Designer der Winform und erstellen Sie alle neu (Strg-Umschalt-B). Das hat bei mir funktioniert.

Es scheint, als hätte eine Art Handle aus der Winform-App (auf der ein Hintergrundarbeiter ausgeführt wird) noch ein Datei-Handle für einige der anderen verwendeten Bibliotheken.

Obelix
quelle
0

Ich hatte zwei Instanzen von Visual Studio die gleiche Lösung geöffnet.

Janis S.
quelle
0

In meinem Fall wurden einige vstest-Prozesse ausgeführt (mit verschiedenen Namen, die jedoch alle die Zeichenfolge vstest enthalten). Ich musste sie in taskmgr beenden.

JT
quelle
0

Gleicher Fehler, behoben durch Aktualisierung der Google Nuget-Support-Pakete

Gustavo Baiocchi Costa
quelle
0

Als ich den Prozess beendet habe .Net Core Host, hat sich alles gut entwickelt. Ich musste Visual Studio nicht schließen oder etwas anderes ändern.

slimeygecko
quelle
0

Starten Sie für diejenigen, die in VS mit Docker entwickeln, den Docker für Windows-Dienst neu, und das Problem wird sofort behoben.

Vor dem Neustart von Docker habe ich alle genannten Antworten ausprobiert, keinen laufenden msbuild.exe-Prozess gefunden und auch versucht, VS ohne Erfolg neu zu starten. Nur das Neustarten von Docker hat funktioniert.

Carlos
quelle
0

Eine weitere Lösung: Wenn die Dateien gesperrt werden, wird ein Blockierungsprozess gemeldet (z. B. "ServiceHub.Host.CLR.x64 (7764)"), dessen ID in Klammern steht. Um den Prozess zu beenden, öffnen Sie PowerShell (x + Win + I) und geben Sie Folgendes ein: "Stop-Process -Id idNumber".

TripleAccretion
quelle
0

Ich bin kürzlich auf das Problem bei der Bereitstellung in Service Fabric gestoßen. Der Fehler impliziert, dass eine 'Datei' verwendet wird. Ich habe jedoch festgestellt, dass der Port von einer anderen IDE verwendet wurde. Durch das Stoppen eines laufenden Dienstes, der bereits auf dem Port gehostet wurde, konnte ich das Auftreten dieser Ausnahme verhindern.

Osoklever
quelle
0

Ich hatte das gleiche Problem. Ich habe mehrere der oben aufgeführten Lösungen ausprobiert, aber sie haben bei mir nicht funktioniert.

Ich habe dieses Problem gelöst, indem ich die Verbindung über den Server-Explorer geschlossen und alle in Visual Studio geöffneten Registerkarten geschlossen habe.

Jayesh Baviskar
quelle
0

Wenn dies ein SSIS-Projekt ist, öffnen Sie den Task-Manager und beenden Sie alle Instanzen von DtsDebugHost.exe, die die gesperrten Dateien freigeben sollen.

metabuddy
quelle
0

Ich verwende Visual Studio Code und habe diesen Fehler erhalten, weil der Dev-Server ausgeführt wurde (ich habe den Dev-Server durch Drücken von ausgeführt Ctrl + F5).

Daher habe ich einfach auf das Stoppschild geklickt, um es zu stoppen, und der Fehler ist verschwunden.

Seif
quelle
0

Ich hatte dieses Problem (und es ist ein Problem, das ich an anderen Orten gesehen habe, nicht nur bei VS).

Es wird von Dropbox verursacht (in meinem Fall). Nach dem Bearbeiten von Code und dem Ausführen von "Ausführen" sperrt Dropbox die Datei manchmal sofort (damit sie verarbeitet werden kann).

Lösung 1. Drücken Sie einfach erneut auf Ausführen

Lösung 2. Dropbox anhalten. (nicht gut, wenn Sie Dropbox als Cloud-Backup verwenden)

Lösung 3. Entfernen Sie den Build-Ordner aus der Dropbox-Synchronisierungsliste.

KevinLeeSmith
quelle
0

Das Löschen des Obj-, Retail- und Debug-Ordners des .NET-Projekts und das erneute Erstellen funktionierten für mich.

Siddhant Gupta
quelle