Fehler: Zugriff auf die Datei bin / Debug /… nicht möglich, da sie von einem anderen Prozess verwendet wird

112

Beim Debuggen meines Projekts wird folgende Fehlermeldung angezeigt:

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

Mit dem Prozess-Explorer sehe ich, dass MyApplication.exe nicht verfügbar war, der Systemprozess es jedoch weiterhin verwendet, obwohl ich das Debuggen zuvor beendet habe. Immer wenn ich meinen Code ändere und mit dem Debuggen beginne, wird es passieren. Wenn ich das Projekt auf USB kopiere und debugge, läuft es in Ordnung.

Warum? Wie kann ich diesen Fehler beheben?

Ich benutze Window 7 Professional. Mit XP habe ich diesen Fehler nie bekommen.

Trần Minh
quelle
1
win7 sperrt manchmal Dateien, die im Explorer angezeigt werden. Stellen Sie daher sicher, dass Ihr Debug-Ordner nicht geöffnet ist.
Necrolis
Ich denke, Systemprozess verwendet es.
Trần Minh
1
Es ist entweder eine Sperre oder ein Idiot, der der Quellcodeverwaltung / bin hinzugefügt wurde, und jetzt sind die Dateien schreibgeschützt (Rechtsklick auf bin, deaktivieren Sie schreibgeschützt).
Stefan Steiger
3
Dies ist in Visual Studio 2017 schlimmer als je zuvor.
Rob Lyndon
1
In meinem Fall MSBuild.exehatte die Datei einen Halt, beenden Sie einfach den Prozess im Task-Manager
Pierre

Antworten:

119

Ugh, das ist ein altes Problem, das immer noch gelegentlich in Visual Studio auftaucht. Es hat mich ein paar Mal gebissen und ich habe Stunden damit verloren, neu zu starten und mit VS zu kämpfen. Ich bin sicher, dass es hier auf SO mehr als einmal diskutiert wurde. Es wurde auch in den MSDN-Foren darüber gesprochen. Es gibt keine tatsächliche Lösung, aber es gibt einige Problemumgehungen. Beginnen Sie hier zu recherchieren .

Was passiert ist, dass VS eine Sperre für eine Datei erwirbt und diese dann nicht freigibt. Ironischerweise verhindert diese Sperre, dass VS selbst die Datei löscht, damit sie beim erneuten Erstellen der Anwendung neu erstellt werden kann. Die einzige offensichtliche Lösung besteht darin, VS zu schließen und neu zu starten, damit die Sperre für die Datei aufgehoben wird.

Meine ursprüngliche Problemumgehung bestand darin, den Ordner bin / Debug zu öffnen und die ausführbare Datei umzubenennen. Sie können es nicht löschen , wenn es gesperrt ist, aber Sie können es umbenennen. Sie können also einfach eine Nummer am Ende hinzufügen oder so, sodass Sie weiterarbeiten können, ohne alle Fenster schließen und auf den Neustart von VS warten zu müssen. Einige Leute haben dies sogar mithilfe eines Pre-Build-Ereignisses automatisiert , um eine zufällige Zeichenfolge an das Ende des alten Ausgabedateinamens anzuhängen. Ja, dies ist ein riesiger Hack, aber dieses Problem wird so frustrierend und schwächend, dass Sie alles tun werden.

Nach etwas mehr Experimentieren habe ich später erfahren, dass das Problem nur dann auftritt, wenn Sie das Projekt mit einem der offenen Designer erstellen. Die Lösung, die für mich langfristig funktioniert hat und mich daran gehindert hat, jemals wieder mit einem dieser dummen Fehler umzugehen, besteht darin, sicherzustellen, dass ich immer alle Designerfenster schließe, bevor ich ein WinForms-Projekt erstelle. Ja, auch dies ist etwas unpraktisch, aber es ist sicher besser, wenn VS zweimal pro Stunde oder länger neu gestartet werden muss.

Ich gehe davon aus, dass dies auch für WPF gilt, obwohl ich es nicht benutze und das Problem dort nicht persönlich erlebt habe.

Ich habe auch noch nicht versucht, es auf VS 2012 RC zu reproduzieren. Ich weiß nicht, ob es dort schon behoben wurde oder nicht. Bisher habe ich jedoch die Erfahrung gemacht, dass es auch dann noch angezeigt wird, wenn Microsoft behauptet, es behoben zu haben. Es ist immer noch in VS 2010 SP1 vorhanden. Ich sage nicht, dass ihre Programmierer Idioten sind, die natürlich nicht wissen, was sie tun. Ich denke, es gibt nur mehrere Ursachen für den Fehler und / oder dass es sehr schwierig ist, sich in einem Labor zuverlässig zu reproduzieren. Das ist der gleiche Grund, warum ich persönlich keine Fehlerberichte darüber eingereicht habe (obwohl ich + 1'ed andere Leute habe), weil ich es nicht zuverlässig reproduzieren kann, eher wie der abscheuliche Schneemann.

<end rant, der sich an niemanden richtet>

Cody Grey
quelle
1
Dies geschieht (für mich) immer noch in VS2013. Es ist immer die PDB-Datei für das WPF-Projekt in meiner Lösung, die im Zielverzeichnis gesperrt wird. Das Schließen aller Designer hat nicht funktioniert (boo!), Aber das Umbenennen der Datei hat funktioniert (danke, Cody!). Riesenhack winkt ...
Jon
2
Das passierte mir seit gestern, als ich auf vS 2013 aktualisiert habe ... das war mir seit VS 2008 kein einziges Mal passiert ... so traurig.
SomeNickName
8
VS 2015, und ich habe immer noch das Problem.
Berin Loritsch
13
Dies geschieht in Visual Studio 17, und ein Neustart von Visual Studio hilft nicht.
Rob Lyndon
2
@jairhumberto kein Grund für den Snark, Computer sind so frustrierend wie es ist, keine Notwendigkeit, das an jemand anderen weiterzugeben .. aber das funktioniert für mich für dieses spezielle Problem, vielleicht haben Sie etwas anderes! Siehe: stackoverflow.com/a/19649014/27494
ScottN
64

Dieser Fehler ist bereits in Visual Studio 2008 aufgetreten. Er ist zurückgekommen und in Visual Studio 2012 häufiger aufgetreten.

Hier ist was ich tue.

Fügen Sie dies in das Pre-Build-Ereignis des problematischen Projekts ein:

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
ScottN
quelle
1
Wo finde ich dieses Pre-BuildEreignis in meinem Windows-Formular?
Unbekannt
2
@qwerty Es befindet sich in den Eigenschaften des Projekts im Abschnitt "Build-Ereignisse". Wenn Sie sich in einem VB.net-Projekt befinden, wird im Abschnitt "Kompilieren" die Schaltfläche "Build-Ereignisse" angezeigt.
ScottN
@ScottN: Übrigens, dieser pre-buildCode ist auch das Mittel für die bereitgestellte Anwendung (über eine Clickonce-Anwendung), wenn meine App ausgeführt wird und dann ein Fehler / eine Panne im Task-Manager aufgetreten ist. Ich werde die Task beenden, aber die Aufgabe myApp.exenicht beenden und sie auffordern ERROR ON ENDING TASK?
Unbekannt
@qwerty Nein, dies hat keine Zuordnung zu einer von ClickOnce bereitgestellten Anwendung. Dieser Fehler tritt nur auf, wenn Sie Ihre Anwendung während der Entwicklung und beim Testen erstellen, und nur in Visual Studio, nicht für bereitgestellte Anwendungen, die auf Client-Systemen ausgeführt werden.
ScottN
Worauf bezieht .lockedsich?
Shimmy Weitzhandler
22

Computer (Rechtsklick) -> Verwalten -> Service & Anwendung -> Service -> Anwendungserfahrung aktivieren

Arbeitete für mich!

Alex
quelle
2
Ich hatte diesen Dienst vor einigen Monaten deaktiviert. Das Aktivieren schien das Problem in Visual Studio zu lösen (Kopieren nicht möglich, da die exe-Datei gesperrt ist). Ich frage mich, warum dieser Dienst ausgeführt werden muss. Was ich darüber gelesen habe, schien nichts mit diesem Fehler zu tun zu haben (z. B. blackviper.com/windows-services/application-experience ).
Andreas Jansson
10
Ich habe diesen Dienst ausgeführt, bekomme aber immer noch das Problem mit der Sperre.
Antfx
1
+1 Wow, ich habe versucht / alles / sonst habe ich gefunden. Schließlich stolperte darüber, um es zu beheben. Meins war ebenfalls deaktiviert. Hätte das nie als Schuldigen gedacht!
John S.
Wenn Sie Windows 7 SP1 mit VS2010 SP1 ausführen und die "Application Experience" -Dienste aktivieren, kann ich sofort helfen. Vielen Dank. Eine Minute später wird das Problem jedoch nicht sofort reproduziert, wenn es ausgeschaltet wird.
Jimm Chen
7
Service nicht in Windows 10 gefunden
JerryGoyal
13

Ich hatte das gleiche Problem in Visual Studio 2013. Ich bin nicht sicher, was dies für mein Projekt verursacht hat, aber ich konnte es beheben, indem ich die Lösung bereinigte und neu erstellte.

  1. Build> Clean Solution
  2. Build> Rebuild Solution
lkisac
quelle
1
Versuchen Sie es nicht bei großen Projekten ... Der vollständige Wiederaufbau dauert sehr lange.
mBardos
7

Zumindest in meinem Fall habe ich festgestellt, dass Visual Studio 2012 mindestens zwei Geisterprozesse von msbuild.exe erstellt hat, die nach dem Erstellen nicht verloren gingen. Diese Zombies verursachen anscheinend Dateisperren.

Das Töten von msbuild.exe ist eine einmalige Lösung, die pro Build-Basis durchgeführt werden muss.

Aber dann habe ich herausgefunden, dass ich den parallelen Build ein für alle Mal deaktivieren kann - ging zu Extras> Optionen> Projekte und Lösungen> Erstellen und Ausführen> "Maximale Anzahl paralleler Projektbuilds" - standardmäßig hat er den Wert 8, I. habe auf 1 gewechselt. Funktioniert wie Charme.

Natürlich sind Builds jetzt etwas langsamer, aber sicherer als leid. Zumindest für dieses spezielle kleine Projekt brauchte ich nicht mehr als einen Build-Thread.

TarmoPikaro
quelle
7

Ich verstehe, dass dies eine alte Frage ist. Leider hatte ich das gleiche Problem mit meiner .net core 2.0Bewerbung in visual studio 2017. Also dachte ich daran, die Lösung zu teilen, die für mich funktionierte. Vor dieser Lösung hatte ich die folgenden Schritte ausprobiert.

  1. Visual Studio neu gestartet
  2. Die gesamte Anwendung geschlossen
  3. Reinigen Sie meine Lösung und bauen Sie sie neu auf

Keiner der oben genannten Schritte hat das Problem nicht behoben.

Dann öffnete ich meinen Task Managerund ausgewählten dotnetProzess und klickte dann auf die Schaltfläche Aufgabe beenden. Später öffnete ich mein Visual Studio und alles funktionierte gut.

Geben Sie hier die Bildbeschreibung ein

Sibeesh Venu
quelle
2

Sehen Sie meine Antwort hier, wenn Sie dieses Problem haben, während Sie Unit-Tests ausführen. Antwort unten kopiert:

Aufbauend auf Sébastiens Antwort habe ich meinem Testprojekt einen vorgefertigten Schritt hinzugefügt, um alle vstest.*noch laufenden ausführbaren Dateien automatisch zu beenden. Der folgende Pre-Build-Befehl hat bei mir funktioniert:

taskkill /f /im vstest.*
exit 0

Der exit 0Befehl befindet sich am Ende, um einen Buildfehler zu verhindern, wenn keine vstest.*ausführbaren Dateien ausgeführt werden.

mrtumnus
quelle
1

Vor kurzem hatte ich Probleme mit Visual Studio 2012 mit derselben Fehlerbeschreibung: "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird ..."

Um dies zu beheben, müssen Sie zunächst die Anwendung verstehen, die sie noch verwendet. Ich habe alle Prozesse wie "MSBuild" und "MSBuild Host" heruntergefahren. Das reicht aber nicht. Wenn Sie "Code Contracts" installiert und aktiviert haben, werden manchmal Ihre DLLs benötigt, um diesen Vorgang zu überprüfen und aufzulegen.

Sie müssen also alle Prozesse von "CCCheck.exe" stoppen und das ist alles.

Um zu verstehen, dass der Prozess Ihre DLL verwendet, können Sie immer versuchen, den Ordner "obj" in Ihrem Dateimanager zu löschen. Dieser Vorgang schlägt fehl. Möglicherweise wird das "Nachrichtenfenster" mit einer Beschreibung des Hängevorgangs angezeigt. Als Variante können Sie auch versuchen, die Anwendung "Sys Internals Suite" zu verwenden.

Yarkov Anton
quelle
Zumindest in meinem Fall habe ich bemerkt, dass Visual Studio Geisterprozesse von msbuild.exe erstellt hat, die nach dem Erstellen nicht verloren gingen. Diese Zombies verursachen anscheinend Dateisperren. Aber keine Ahnung, wie man es löst. Das Töten von msbuild.exe ist eine einmalige Lösung, die pro Build-Basis durchgeführt werden muss.
TarmoPikaro
1

Hat für mich gearbeitet. Task-Manager -> Name des Projekts -> Aufgabe beenden. (Ich hatte 3 gleiche Prozesse mit meinem Projektnamen);

VS 2013; Gewinnen Sie 8;

GroD
quelle
1

Stellen Sie sicher, dass alle vorherigen Ausführungen der Anwendung (z. B. Start ohne Debugging-Option) tatsächlich gestoppt sind. Ich habe an einer WPF-Anwendung gearbeitet, ohne Debugging gestartet und sie minimiert, als ich immer wieder den Fehler bekam. Nach dem Schließen der Anwendung wurde das VS-Verhalten wieder normal.

sk1900
quelle
1

Dieses Problem hat mich in Visual Studio 2017 geplagt. Es begann vor zwei oder drei Wochen und hat meine Produktivität stark beeinträchtigt. Sauber und Rebulid haben nicht funktioniert; Selbst ein Neustart meines Computers reicht nicht aus.

Eine Möglichkeit, das Problem zu beheben, besteht darin, die fehlerhafte Assembly zu bereinigen und das Projekt, das Sie unmittelbar danach ausführen möchten, zu erstellen (im Gegensatz zum erneuten Erstellen). Dies funktioniert in etwa 30% der Fälle.

Die wahrscheinlich zuverlässigste Lösung, die ich gefunden habe, besteht darin, eine Eingabeaufforderung für Entwickler zu öffnen und msbuilddirekt zu verwenden. Ich mache das seit drei Tagen und bis jetzt ist das Problem kein einziges Mal aufgetreten.

Rob Lyndon
quelle
1

In meinem Fall habe ich "Alle Dateien anzeigen" aktiviert. Visual Studio 2017

JD - DC TECH
quelle
1

Ausführen taskmanager.
Suchen netcoreund löschen Sie es.
Sie können die Datei dann manuell oder durch Ausführen löschen Clean.

BobSpring
quelle
0

Dies ist reine Spekulation und keine Antwort.

Ich habe dieses Problem jedoch schon eine Weile.

Ich kam nach einiger Zeit, um eine Interaktion zwischen VS und meinen AV-Vorsichtsmaßnahmen zu vermuten.

Nach einigen Spielen, scheint es , dass es möglicherweise weggegangen, als ich meine Antivirus unter der so dass alles verändert

C: \ Benutzer [Benutzername] \ AppData \ Local \ Microsoft \ VisualStudio \ 10.0 \ ProjectAssemblies

Ordner war nicht im Echtzeitschutz enthalten.

Es sieht so aus, als würde der Build die DLL zuerst hier schreiben und dann an den endgültigen Build-Speicherort kopieren.

PolicyWatcher
quelle
0

Es könnte zu spät sein. Ich stieß jedoch auf ein ähnliches Problem und in meinem Fall hatte das Projekt eine Selbstreferenz. Daher funktionierte das Löschen aus den Referenzen wie ein Zauber !!!

aby
quelle
0

Ich habe den schnellsten Weg gefunden, ohne Formulare zu schließen oder VisualStudio neu zu starten. Gehen Sie zur Kompilierungsseite des Projekts und klicken Sie auf die Schaltfläche "Erweiterte Kompilierungsoptionen ...". Nehmen Sie dann eine Änderung an einer der Optionen vor (z. B. Ändern der Option "Debug-Informationen generieren" von "Vollständig" in "Nur PDF") und klicken Sie auf "OK". Es funktioniert jedes Mal und muss durchgeführt werden, bis MS diesen Fehler behoben hat (ich hatte dieses Problem nie, bis ich von VS2012 zu VS2013 gewechselt bin).

Ein weiterer Hinweis: Wenn Sie das Projekt oder die Lösung nicht bereinigen können, wird es nicht erstellt. Die Dateien sind definitiv von VS gesperrt (kein Antivirenproblem, zumindest in meinem Fall nicht)

MC9000
quelle
0

Ich habe alle diese Vorschläge sowie andere Vorschläge ausprobiert, die an anderer Stelle gefunden wurden, und das einzige, was für mich funktioniert hat, war ein Neustart meines Computers. Dann habe ich eine saubere Lösung gemacht, gefolgt von einem Wiederaufbau. Ich verwende Visual Studio 2013 als Referenz.

mortey
quelle
0

Ich bin auf dasselbe Problem gestoßen , und ich habe festgestellt, dass im Hintergrund tatsächlich mehrere Windows-Formularanwendungen ausgeführt werden . Dies geschieht, wenn Ihre Bewerbung zwei Formulare enthält und Sie das zweite Formular schließen, das nicht Ihr Hauptformular ist, sodass die Bewerbung nicht vollständig beendet wird.

Normalerweise führe ich meine Anwendung aus

  • durch seine exe oder
  • ohne Debugging ausführen

Die Lösung besteht darin, die andere Instanz der Windows Form-Anwendung zu schließen . Dies ist eine Möglichkeit, Ihre Anwendungsinstanz immer zu schließen.

jmvtrinidad
quelle
0

Befehl vor dem Erstellen

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Hat geholfen

Kakha Middle Or. En
quelle
0

[Gelöst] Fehler: Zugriff auf Datei bin / Debug /… nicht möglich, da sie von einem anderen Prozess verwendet wird:

Ich nähere mich, dass Sie diesen Fehler erhalten, während Sie versucht haben, zwei Fenster nacheinander auszuführen, z. B. zuerst ein Formular zu laden, dann manchmal automatisch zu verschwinden und das zweite Formular auf den Bildschirm zu laden.

Grundsätzlich müssen Sie Ihr erstes Formular schließen, das im Hintergrund ausgeführt wird und der Hauptgrund für diesen Fehler ist.

Um das erste Formular zu schließen, müssen Sie diese beiden Codezeilen in den Ereignishandler für das Laden des zweiten Formulars einfügen.

    Form1 form = new Form1();
    form.Close();

Dadurch wird der Fehler perfekt behoben.

Sabir Al Fateh
quelle
0

Eine einfache Lösung besteht darin, in den Ordner bin \ Debug zu wechseln, alle Dateien in diesem Ordner zu löschen und anschließend neu zu erstellen. Wenn dies nicht funktioniert, schließen Sie Visual Studio und wechseln Sie mit dem Datei-Explorer in den Ordner bin \ Debug. Klicken Sie auf der linken Seite auf Datei> Eingabeaufforderung öffnen> Eingabeaufforderung als Administrator öffnen> Geben Sie diesen Befehl ein. "DEL / F / Q / A * "> dann neu erstellen

Hung Vu
quelle
0

Ich fand die Antwort von Cody Gray teilweise hilfreich, da sie mich zur eigentlichen Quelle meines Problems führte, auf das einige von Ihnen möglicherweise auch stoßen: Die Testausführung von Visual Studio bleibt standardmäßig geöffnet und behält eine Sperre für die Dateien bei.

Befolgen Sie die Anweisungen unter https://connect.microsoft.com/VisualStudio/feedback/details/771994/vstest-executionengine-x86-exe-32-bit-not-closing-vs2012-11-0, um dieses überwiegend nutzlose Verhalten zu stoppen -50727-1-rtmrel

Deaktivieren Sie das Menü Test -> Testeinstellungen -> "Test Execution Engine laufen lassen"

das richtige Zeug
quelle
0

Mein Problem war, dass dotnet aufgelegt wurde und wann immer VS versuchte, eine neue DLL zu erstellen oder auf eine alte zuzugreifen, sich der Dotnet-Prozess an die DLL klammerte und Visual Studio daran hinderte, die DLL zu klonen. Die Lösung besteht darin, alle Dotnet-Aufgaben im Task-Manager zu beenden (die tote Aufgabe wird nur dann tatsächlich entfernt, wenn Sie versuchen, eine zu beenden, und sie wird nicht heruntergefahren, was bedeutet, dass sie funktioniert).

Joel Hines
quelle
0

Schließen Sie VisualStudio, drücken Sie Strg-Alt-Löschen, wählen Sie Task-Manager, suchen und beenden Sie alle MSBuild-Prozesse. VisualStudio hat im Grunde genommen einen ziemlich schwerwiegenden Fehler, bei dem es die Kontrolle über seinen Debugger verliert und der Debugger die PDF-Datei im Debug / Bin sperrt Ordner. Nachdem Sie alle MSBuild-Prozesse (Debugger) beendet haben, löschen Sie den Ordner / debug / bin und öffnen Sie Ihre Lösung erneut in Visual Studio. Du kannst jetzt gut gehen. Microsoft muss diesen Mist beheben.

JakeJ
quelle
0

Ich habe eine separate Frage zu VS 2017 geöffnet , die sich nach einem Update ähnlich verhalten hat. Das Problem schien jedoch vom Antivirenprogramm generiert zu werden.

Ich habe den Ordner bin zur Antiviren-Ausschlussliste hinzugefügt, den Computer neu gestartet und jetzt scheint es zu funktionieren.

meJustAndrew
quelle
0

Ich habe dieses Problem gelöst.

In der Nähe des Debugs sehen Sie ein Dropdown-Menü mit einigen Konfigurationen. Standardmäßig gab es eine CPU. Wählen Sie x86 aus und führen Sie das Programm aus, das funktionieren soll. Wenn x86 nicht vorhanden ist, rufen Sie den Konfigurationsmanager auf und fügen Sie x86 hinzu

Sanjula De Alwis
quelle
-1

Noch ein Kludge, ugh, aber es ist einfach und funktioniert für mich in VS 2013. Klicken Sie auf das Projekt. Im Eigenschaftenfenster sollte sich ein Eintrag mit dem Namen Projektdatei mit einem Wert befinden

(Ihr Projektname) .vbproj

Ändern Sie den Projektnamen, z. B. indem Sie am Ende ein -01 hinzufügen. Die ursprünglich gesperrte ZIP-Datei ist noch vorhanden, wird jedoch nicht mehr referenziert, sodass Ihre Arbeit fortgesetzt werden kann. Beim nächsten Neustart des Computers verschwindet diese Sperre und Sie können die fehlerhafte Datei löschen.

den232
quelle