426 Stimmen

Visual Studio "Konnte nicht kopieren" .... während des Builds

Während des Builds meines VS2012 C#-Projekts erhalte ich immer diesen Fehler:

Fehler   41  Konnte "obj\Debug\WeinGartner.WeinCad.exe" nicht nach
"bin\Debug\WeinGartner.WeinCad.exe" kopieren. 
Wiederholungsversuche von 10 überschritten. Fehlgeschlagen.    

Fehler   42  Konnte Datei "obj\Debug\WeinGartner.WeinCad.exe" nicht nach
"bin\Debug\WeinGartner.WeinCad.exe" kopieren. Der Prozess kann nicht auf die Datei
'bin\Debug\WeinGartner.WeinCad.exe' zugreifen, da sie von einem anderen Prozess verwendet wird.

Jetzt habe ich herausgefunden, dass das Beenden des Prozesses

Weingartner.WeinCad.vhost.exe

funktioniert (manchmal), aber das nervt mich. Gibt es eine Möglichkeit, dies komplett zu verhindern?

Meine Debugger-Einstellungen sind

Bildbeschreibung eingeben Bildbeschreibung eingeben

519voto

Gerard Punkte 12459

Ich bin ähnlichen Fehlermeldungen in Visual Studio 2013 begegnet.

Meistens habe ich festgestellt, dass diese Situation aufgetreten ist, wenn ein Debug-Prozess aufgrund einer Ausnahme angehalten wurde.

Wenn mir das Bereinigen und Neu Erstellen das Problem nicht gelöst hat, hatte ich Erfolg, indem ich Folgendes gemacht habe:

  • Visual Studio schließen
  • Die Ordner bin und obj löschen, und
  • Visual Studio wieder öffnen.

Dieser "Fehler" besteht seit Visual Studio 2003.

Zuletzt habe ich auch festgestellt, dass ich dieses Problem oft überwinden kann, indem ich einfach die ausführbare Datei umbenenne und dann lösche.

112voto

Geoff Punkte 8377

Im Visual Studio Premium 2013 (Update 3) habe ich dies mit einem Pre-Build-One-Liner gelöst:

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

Dies löscht gracefully alle alten PDB-Dateien (wenn möglich) und benennt dann alles um, was übrig bleibt, mit einer .old.pdb-Erweiterung. Ein schöner Nebeneffekt ist, dass falls das alte PDB noch gesperrt ist, einfach ein weiteres .old-Stück dem Dateinamen hinzugefügt wird, und alles wird beim nächsten Neustart von Visual Studio und beim nächsten Build aufgeräumt.

Zum Beispiel hinterlässt Build/Debug-Sitzung 1 MyProject.pdb gesperrt.
Das nächste Mal, wenn Sie bauen:
MyProject.pdb --> MyProject.old.pdb

Dann wird Build/Debug-Sitzung 2 gestartet, und beide MyProject.pdb und MyProject.old.pdb sind immer noch gesperrt:
MyProject.old.pdb --> MyProject.old.old.pdb
MyProject.pdb --> MyProject.old.pdb

Schließlich werden durch Neustarten von Visual Studio und einen frischen Build beide dieser Dateien losgeworden und der Prozess wird wie gewohnt fortgesetzt.

104voto

Rushi Daxini Punkte 1580

Es liegt daran, dass Sie Ihre Anwendung geschlossen haben, aber sie läuft immer noch im Hintergrund.

Temporäre Lösung:

  • Öffnen Sie den Task-Manager (Strg + Shift + Esc).
  • Gehen Sie zum Tab "Prozesse" und suchen Sie "YourProjectName.exe".
  • Überprüfen Sie "Prozesse aller Benutzer anzeigen", wenn Sie Ihren Prozess nicht finden können.
  • Beenden Sie den Prozess.

Permanente Lösung: Sie müssen Ihre Anwendung über den Code schließen. Hier ist der Code...

System.Windows.Forms.Application.Exit();

Sie müssen diesen Code in das Schließereignis des Formulars in allen Formularen einfügen. Beispiel:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

25voto

gbjbaanb Punkte 50303

Die .vhost.exe ist ein Debugger-Prozess, daher scheint es, dass der zu debuggende Prozess nicht ordnungsgemäß geschlossen wurde. Wahrscheinlich haben Sie einen Fehler, der ihn am Leben hält, und stoppen den Debug-Prozess nicht korrekt - es gibt Optionen, um sich vom Prozess abzumelden, wenn Sie auf 'Debuggen beenden' klicken, anstatt den Debugger tatsächlich zu beenden, vielleicht haben Sie das so eingestellt.

Aber das ist das Problem - die Datei, die Sie kopieren wollen, ist gesperrt (also wird noch vom Betriebssystem verwendet), daher wird das Kopieren verhindert. Stellen Sie sicher, dass die Datei frei ist, und Sie werden kopieren können.

25voto

pat capozzi Punkte 1354

Ich habe es gelöst, indem ich IISExpress im Task-Manager beendet habe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X