web-dev-qa-db-de.com

VisualStudio2010 Debugging - Der Prozess kann nicht auf die Datei zugreifen, da er von einem anderen Prozess verwendet wird

Ich kann keine WinForms C # -Anwendung mit der freigegebenen Version von Visual Studio 2010 Prof. debuggen.

Ich erhalte die folgende Fehlermeldung nach dem zweiten Debugging-Lauf.

Fehler 9 Datei "obj\x86\Debug\Arrowgrass Reports.exe" kann nicht nach "bin\Debug\Arrowgrass Reports.exe" kopiert werden. Der Prozess kann nicht auf die Datei 'bin\Debug\Arrowgrass Reports.exe' zugreifen, da er von einem anderen Prozess verwendet wird.

Ich habe ein Pre-Build-Skript ausprobiert, um zu versuchen, diese Datei zu löschen, sie wurde jedoch von Visual Studio gesperrt.

Es gibt ein paar Hinweise darauf im Netz, daher handelt es sich um ein bekanntes Problem. Hat jemand einen Hotfix oder eine effektive Problemumgehung?

49
Richard Forss

Ich habe festgestellt, dass dieses Problem sehr einfach zu reproduzieren ist, und die Lösung für mich ist eine Variation der Antwort von Richard Fors. Wenn ich ein UserControl im Designer habe, den Debugger ausführen und dann das UserControl bearbeiten, schlägt die nachfolgende Neuerstellung fehl. Wenn ich das UserControl vor dem Ausführen des Debuggers schließe, erhalte ich diesen Fehler nie. Ich stelle also sicher, dass das Designerfenster geschlossen wird, bevor Sie auf F5 klicken.

29
DocKell

Seit Oktober 2012 habe ich immer noch dieses Problem, sodass das VS 2010 SP1 das Problem nicht gelöst hat. Was ich tat und konsequent arbeitete, war das Deaktivieren des Hosting-Prozesses in den Projekten.

So deaktivieren Sie den Hosting-Prozess:

.  Open a project in Visual Studio.

.  On the Project menu, click Properties.

.  Click the Debug tab.

.  Clear the Enable the Visual Studio hosting process check box.

Quelle: http://msdn.Microsoft.com/en-us/library/ms185330(v=vs.100).aspx

27
Alex. S.

Sie können versuchen, den Prozess vshost.exe abzubrechen:

taskkill /F /IM "Arrowgrass Reports.vshosts.exe"

Vielleicht haben Sie auch Glück und können die betreffende Datei einfach verschieben. Sie können die Datei verschieben, indem Sie dem Pre-Build-Ereignis Ihres Projekts die folgenden Codezeilen hinzufügen:

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 
21
Dirk Vollmar

Das Deaktivieren der Fenstersuche wurde für mich nicht korrigiert. Die Deaktivierung von Antivirus hat dies jedoch getan (unser Antivirus ist Symantec Endpoint Protection 11)

Daher konnte ich das Problem beheben, indem ich die Debug-Einstellungen im Projekt so veränderte, dass der Arbeitsordner auf einen Pfad auf dem Laufwerk C: verweist und dann diesen Pfad von den Anti-Virus-Scan-Einstellungen für den automatischen Schutz ausgeschlossen wurde.

Ich hoffe das hilft jemandem.

4
Joe C

Ich habe diese Antwort in einer ähnlichen Frage gepostet, aber ich dachte, ich würde es auch hier sagen:

Okay ... das klingt vielleicht ziemlich verrückt.

Ich habe dieses Problem in VS2010 für die letzten paar Jahre gehabt. Die hier erwähnte Problemumgehung funktioniert für mich, aber ich habe oft vergessen, zuerst alle meine Formulare/Benutzersteuerelemente zu schließen.

Ich habe festgestellt, dass nur die geöffneten Dateien angezeigt werden über:

Computer Management (compmgmt.msc)->Shared Folders->Open Files

gibt die gesperrte Datei frei. Sehr seltsam, aber es funktioniert bei mir!

4
Tom Studee

In meinem Fall habe ich Projekteigenschaften -> Registerkarte Sicherheit -> Klick-Einmal-Sicherheitseinstellungen deaktivieren (falls aktiviert). Es hat für mich funktioniert. In meinem Projekt wurde dieser Fehler für eine C++ - DLL angezeigt, die in meinem C # -Projekt verwendet wird.

2
Manish Dubey

Überprüfen Sie den Task-Manager für den angegebenen Prozess und beenden Sie den Prozess explizit. Diese Lösung hat für mich funktioniert.

1
iltaf khalid

Schließen vor kurzem geändert User Controls Problem in meinem Szenario behoben. Ich hoffe, das hilft jemandem da draußen. 

1
oshan2csd

Die beschriebene Bedingung kann auch durch die fehlerhafte DLL - oder EXE-Datei verursacht werden, die auf sich selbst verweist. In diesem Fall gibt der zuvor beschriebene Process Explorer-Test niemals eine Übereinstimmung zurück (z. B. läuft er nicht). Diese unerwartete Situation scheint während einer Reihe von Vorgängen in VS2010 (und wahrscheinlich allen vorherigen Versionen) verursacht worden zu sein, die hinter den Kulissen hinterlistig den Verweis hinzufügt. Die genaue Ursache dafür wurde nicht ermittelt (oder behoben, die mir bekannt ist). Um diesen Fehler zu überprüfen und zu beheben, stellen Sie sicher, dass das fehlerhafte DLL oder die EXE-Datei nicht als Verweis auf sich selbst aufgeführt ist.

1
EVAN

Ich kann nicht in einen Kommentar schreiben, da nicht bei 50 Punkten, aber für mich habe ich meinen Projektordner in ESET Enpoint Security ver 5 ausgeschlossen. Es scheint, als hätte er einige Dateien blockiert/blockiert. In My Error wurde nicht angegeben, welches Exe oder welche Datei verwendet wurde. Daher dauerte es lange, bis das, was JoeC über Antivirus sagte, endlich gefunden und ausprobiert wurde. Scheint jetzt zu funktionieren (Visual Studio 2010 SP1)

1
Mark Groenewald

Dieses Problem ist bei der Entwicklung von Windows-Diensten aufgetreten. Ich habe herausgefunden, dass es passiert, wenn der Dienst läuft. Daher müssen Sie nur den Dienst (von der Services.msc-Konsole) aus beenden und schon kann es losgehen! 

Ich hoffe, das hilft. Tidjani.

1

Fehler ("Der Prozess kann nicht auf die Datei zugreifen ... weil er von einem anderen Prozess verwendet wird"), als ich die Lösung (Visual Studio 2010 C # Express mit SP1) von zwei großen (10 Quelldateien, ~ 500 Zeilen pro Datei) geändert habe. Projekte, bei denen eines auf das andere verweist, auf Lose (6) kleinerer Projekte, bei denen viele Projekte auf andere Projekte verweisen.

Die Verweise bezogen sich auf die DLL- und Exe-Dateien (die Debug-Versionen), NICHT auf die Projekte, obwohl sich die Projekte in derselben Lösung befanden.

Ich habe dann gelernt, dass Verweise auf Projekte und nicht auf Dateien sein sollten, damit F12 ordnungsgemäß funktioniert. Also habe ich die Referenzen geändert. Das hat dazu geführt, dass F12 funktioniert (springt zur Quelldatei anstatt zu einer automatisch generierten Schnittstellenbeschreibung) und zur gleichen Zeit ist der Fehler "Kann nicht auf Datei zugreifen" während des Builds verschwinden.

Ich habe nur die Fehlermeldung "Kann nicht auf Datei zugreifen", wenn ich Builds auf Release-Basis mache. Die Verweise bezogen sich auf die Debug-Versionen von exe/dll. Ich vermute, dass diese Mischung den Fehler in VS auslöst.

1
Tomas Andersson

Löschen Sie die obj-Datei. Beenden Sie den Dienst und starten Sie ihn erneut. Anschließend können Sie das Problem lösen

0
user3437291

Für mich bestand die Lösung darin, das Startprojekt in eine DLL zu ändern (Problem tritt nur im Debugmodus auf, wenn eine Anwendung als Startprojekt verwendet wird). Wenn Ihre Lösung mehrere Projekte enthält (und es wird eine .dll enthalten, sonst würden Sie das Problem nicht erhalten), wechseln Sie zu dieser .dll, keine .vshost.exe, kein Problem.

Das Töten von .vshost.exe funktionierte für mich nicht, da die DLL unmittelbar nach dem Neustart gesperrt wurde.

Stellen Sie außerdem sicher, dass Ihre Referenzen sauber sind, insbesondere bei komplexeren Projekten, und ziehen Sie Projektreferenzen auch eher Assemblyreferenzen usw. vor. Ich nehme an, dass schlechte Referenzen (Rundschreiben und Ähnliches) Probleme bereiten, zumindest habe ich gelesen.

Ein kurzer Artikel von mir zu diesem Problem (und meiner Lösung)

So bereinigen Sie Ihre Referenzen in einer Lösung

0
Andreas Reiff

Beenden Sie den IIS - Dienst, und versuchen Sie es erneut, oder versuchen Sie es erneut, wenn Sie sich einen Neustart Ihres PCs leisten können. Arbeitete für mich in beide Richtungen.

Prost

0
DotNetGeek

Versuchen Sie, die .exe-Datei im Debug- oder Release-Ordner zu löschen (was auch immer Sie gerade arbeiten) Windows fragt Sie, dass der Prozess X dies geöffnet hat und Sie ihn nicht löschen können Danach gehen Sie zum Task-Manager und auf der Registerkarte "Details" Task X-Prozess

0
sadegh saati

Die beste Lösung für mich war, meine Projektdateien aus "Meine Dokumente", die sich auf einem von der IT-Abteilung verwalteten Server befinden, zu verschieben und lokal auf meinem Laufwerk C zu lokalisieren. Funktioniert auch: Deaktivieren Sie das Kontrollkästchen "Aktivieren des Visual Studio-Hosting-Prozesses", wie von anderen Personen angegeben. 

0
Dan

Dieser Fehler ist aufgetreten, wenn sich das Projekt auf einer Remote-Freigabe befindet (z. B. wenn $ env: homepath von Ihrer IT-Abteilung hilfreich auf eine Netzwerkfreigabe umgeleitet wird). Stellen Sie sicher, dass sich Ihr Projekt auf einem lokalen Laufwerk befindet.

0
weloytty

Ich glaube, ich habe gerade den Täter und die Lösung gefunden.

Gehen Sie zu den Diensten und stoppen und deaktivieren Sie den Dienst "Windows-Suche".

Das hat das Problem jetzt für mich gelöst.

0
Zibri

Dem Pre-build-Ereignis der für mich funktionierenden gemeinsamen DLL Folgendes hinzufügen:

if exist "$(TargetPath).locked*" del "$(TargetPath).locked*"
set exitprebuildfor$(ProjectName)=
for /l %%a in (1,1,10) do (
  if defined exitprebuildfor$(ProjectName) goto :ok
  if not exist "$(TargetPath).locked%%a" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked%%a" & set exitprebuildfor$(ProjectName)=1)
:ok
set exitprebuildfor$(ProjectName)=

Es basiert auf der angegebenen Lösung here , aber anstatt nur die DLL in .locked umzubenennen, wird immer versucht, sie in .locked1, locked2 umzubenennen. Mit 10 stoße ich normalerweise einmal am Tag auf das Problem, aber ein Ameisenwert kann verwendet werden.

0
AlexDev

Sieht aus, als wäre dieses Problem (endlich!) Im VS2010 SP1 behoben worden

http://www.Microsoft.com/downloads/de/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5&displaylang=de

0
vov04ka

Mein Problem war, dass Outlook 2010 (Outlook.exe) den gleichen Port wie mein ASP.NET-MVC-Projekt mit dem Ausdruck IIS verwendete. 

Lösung: Schließen Sie Outlook.exe, führen Sie Ihre Lösung aus und öffnen Sie Outlook erneut (damit es einen anderen Port verwendet).

Hoffentlich hilft dies jemandem, da ich dieselbe Fehlermeldung erhalten habe, wie in diesem Thema beschrieben.

0
juFo

Löschen Sie den Ordner "Bin" und führen Sie die Anwendung aus. Dies funktionierte für mich. :)

0
tanmay gharat

Bitte deinstallieren Sie Windows Live SYNC. Passiert es immer noch

0
Zibri

Wenn Sie an einem C # -Projekt arbeiten, das einen Verweis auf C DLL verwendet, können Sie den Fehler beheben, indem Sie das Kontrollkästchen Unsicheren Code zulassen aktivieren. Ich weiß, dass ich in meinem C # -Projekt keine Zeiger verwendet habe, aber ich habe einen bitweisen Operator in C # verwendet. Möglicherweise werden diese C-artigen Merkmale als "Unsicherer" Code umgewandelt.

0
Manish Dubey

Für Windows Project

Der Visual Studio-Hostingprozess kann den ausführbaren Dateizeiger enthalten. Um die Host-Instanz zu stoppen, öffnen Sie den Project properties und gehen Sie dann zur Registerkarte Debug. Deaktivieren Sie nun die Option Enable the Visual Studio hosting Process und aktivieren Sie das Kontrollkästchen erneut, um das Debugging durchzuführen. 

Für ein Webprojekt

Der IIS kann den Dateizeiger enthalten. Durch einen Neustart von IIS kann das Problem behoben werden.

Was für mich funktionierte, war das Entfernen des Status "Nur Lesen" im Ordner "Bin". Nachdem ich das getan habe, hat es seitdem funktioniert. 

0
David

Deaktivieren Sie einfach das Hosting von Visual Studio in debug, führen Sie das Projekt aus, und führen Sie das Projekt erneut aus.

Öffnen Sie ein Projekt in Visual Studio.

. Klicken Sie im Menü Projekt auf Eigenschaften.

. Klicken Sie auf die Registerkarte Debuggen.

. Deaktivieren Sie das Kontrollkästchen Aktivieren des Visual Studio-Hostingprozesses

0
Yash Rana

Mein Problem begann, nachdem ein benutzerdefiniertes Steuerelement erstellt und in die Toolbox-Palette gezogen und dort abgelegt wurde, um es in Designformularen zu verwenden. Zuerst erschien eine Warnung, die besagte, dass es eine Redundanz zwischen der Quelldatei der benutzerdefinierten Steuerung (.cs) und der ausführbaren Datei (.exe) des Projekts gab. Beim Ausführen/Debuggen trat der Fehler auf: Der Zugriff auf die (.exe) -Datei ist nicht möglich, da sie verwendet wird (und der Wert true war).

A hat buchstäblich den gesamten Quellcode in Bezug auf das benutzerdefinierte Steuerelement entfernt, und das letzte Problem wurde nie unterbrochen, bis ich die Verweise ausgecheckt hatte und auf sich selbst verwies, um das vorherige benutzerdefinierte Steuerelement "abrufen" zu können. Ich habe den Hinweis entfernt und fertig !!

Also: einfach die Referenzen überprüfen und die Selbstreferenz zum Projekt entfernen.

0

Erstellen Sie einfach eine Kopie des gesamten Projekts und führen Sie das Projekt aus der neuen Kopie aus.

0
N3O