Ich habe eine einfache WinForms-Lösung in VS 2010. Jedes Mal, wenn ich sie erstelle, wird die Ausgabedatei (bin \ debug \ app.exe) gesperrt, und nachfolgende Builds schlagen mit der Meldung fehl.
"The process cannot access the file 'bin\Debug\app.exe' because it is being used by another process."
Die einzige Möglichkeit, das Projekt zu erstellen, besteht darin, VS danach neu zu starten Jeder Build, der sehr umständlich ist.
Ich habe diesen alten Blog-Beitrag gefunden http://blogs.geekdojo.net/brian/archive/2006/02/17/VS2005FileLocking.aspx - es scheint, dass das Problem wirklich alt ist. Weiß jemand, was hier passiert, oder zumindest eine Problemumgehung?
Aktualisieren
Ich führe die Datei nicht wirklich aus . Das Sperren erfolgt nach dem Build, nicht nach dem Debuggen (dh VS starten - Build - Build - Fail!) Und ich habe versucht, Antivirus auszuschalten. Es hilft nicht.
Update 2
Der Prozess-Explorer zeigt an, dass devenv.exe die Datei geladen hat (in DLLs, nicht in Handles). Es scheint, als ob ein Fehler während des Builds das Entladen verhindert hat, aber der (erste) Build wird ohne andere Meldungen als "1 erfolgreich, o fehlgeschlagen" abgeschlossen.
quelle
Antworten:
Hatte das gleiche Problem, fand aber eine Lösung (danke an Keyvan Nayyeri ):
Aber wie kann man das lösen? Abhängig von Ihrem Projekttyp gibt es verschiedene Möglichkeiten. Eine einfache Lösung, die ich Visual Studio-Add-In-Entwicklern empfehle, besteht darin, den Build-Ereignissen ihres Projekts einen einfachen Code hinzuzufügen.
Sie können der vorgefertigten Ereignisbefehlszeile Ihres Projekts die folgenden Codezeilen hinzufügen.
quelle
if exist "$(TargetDir)$(TargetName).pdb.locked" del "$(TargetDir)$(TargetName).pdb.locked"
,if exist "$(TargetDir)$(TargetName).pdb" if not exist "$(TargetDir)$(TargetName).pdb.locked" move "$(TargetDir)$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked"
Es ist kein Virenproblem. Es ist ein Visual Studio 2010-Fehler. Es scheint, dass das Problem mit der Verwendung von Visual Studio GUI Designer zusammenhängt.
Die Problemumgehung besteht darin, die gesperrte Ausgabedatei im Pre-Build-Ereignis in eine andere temporäre Datei zu verschieben. Es ist sinnvoll, temporäre Dateinamen zufällig zu generieren.
Wenn Sie konstante temporäre Dateinamen verwenden, verschieben Sie einfach die Sperren:
Diese Problemumgehung funktioniert genau einmal
Ich habe auch eine Lösung mit 2 temporären Dateien gefunden, die genau 2 Mal funktioniert.
quelle
del "$(TargetPath).locked.*" /q if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked.%random%" del "$(TargetDir)$(TargetName).pdb.locked.*" /q if exist "$(TargetDir)$(TargetName).pdb" move "$(TargetDir)$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked.%random%" exit /B 0
Das Problem ist mir auch eingefallen.
Mein Szenario war folgendes: Ausführen von Windows 7 (aber möglicherweise auch in Windows XP) und während der Arbeit an einem Projekt mit WPF User Control konnte ich alle Male erstellen, bis ich die XAML-Datei des User Control öffnete - Von dort aus habe ich ' Ich habe einen Build und dann sind die Dateien gesperrt.
Außerdem habe ich festgestellt, dass ich Visual Studio (Devenv.exe) als Administrator ausgeführt habe, Visual Studio ohne Administratorrechte ausgeführt habe und das Problem behoben war! .
Lassen Sie mich wissen, ob es Ihnen auch geholfen hat. Viel Glück.
quelle
Ich habe dies entweder auf einer gierigen Virenscan-Software gesehen oder wenn app.exe nicht richtig heruntergefahren wird. Stellen Sie sicher, dass der Prozess noch nicht ausgeführt wird.
quelle
Was ist mit Virenscannern auf Ihrem Computer? Können Sie Prozesse sehen, die Handles für Ihre Datei enthalten (verwenden Sie den Prozess-Explorer , um dies herauszufinden)?
Möglicherweise ist in Ihrer Prozessliste "app.exe" sichtbar, dh die letzte Version, die Sie debuggt haben, wird noch ausgeführt? Wenn Sie Anwendungen mit mehreren Threads entwickeln, kann dies passieren, wenn Sie nicht
join
alle verwenden.quelle
Ich hatte das gleiche Problem und fand heraus, dass VS die Exe nur sperrt, wenn ich vor dem Erstellen ein Formular oder UserControl in VS öffnete. Die Lösung war recht einfach. Ich musste nur ein Formular / UserControl schließen, bevor ich die Lösung erstellte, und es funktionierte.
quelle
Basieren Sie auf der großartigen Stormenet-Antwort ich ein kleines Skript erstellt, das in jedem Fall funktionieren sollte.
Hier ist der Code, der in das Textfeld für das Ereignis vor dem Erstellen eingefügt werden soll
Hier ist das Skript, das in die Datei kopiert werden soll
$(SolutionDir)\BuildProcess\PreBuildEvents.bat
(natürlich können Sie diesen Pfad ändern):quelle
Es ist auch ein Problem 533411 bekannt, bei dem die Verwendung der automatischen Aktualisierung von Build-Nummern das Sperrproblem verursachen kann. Problemumgehung aus dem Fehlerbericht
quelle
Ich hatte dieses Problem und löste es mit einem benutzerdefinierten Code. Siehe hier: Probleme beim Erstellen von Dateisperren für Visual Studio 2010
Kompilieren Sie das Dienstprogramm in der akzeptierten Antwort und verweisen Sie während des Erstellungsschritts darauf, wie beschrieben, um das Problem zu umgehen. Ich schalte VS 2010 immer noch beim Mittagessen aus, um die morgendliche Arbeit aufzuräumen.
Der Grund für den benutzerdefinierten Code war, dass die häufig empfohlene Lösung nur einmal funktionierte und dann auch die umbenannten Dateien gesperrt wurden, wodurch das Umbenennen verhindert wurde. Hier hängen wir einfach die Datenzeitinformationen an die Datei an, damit die umbenannten Versionen nicht in Konflikt geraten können.
quelle
Das einzige, was für mich funktioniert hat, war, Visual Studio 2012 zu beenden, die Ordner BIN und OBJ für das Projekt mit Problemen zu löschen und Visual Studio erneut zu öffnen.
Problem gelöst ... Bis zum nächsten Mal.
quelle
Wenn Ihr $ (TargetPath) auf eine DLL verweist, die COM verwendet, stellen Sie sicher, dass Sie einen Standardkonstruktor haben. Nicht sicher, warum der Standardkonstruktor dort nicht abgeleitet wird. Das Hinzufügen des Standardkonstruktors hat in diesem Szenario für mich funktioniert.
quelle
Das Schließen des Visual Studios, das erneute Öffnen und das erneute Laden der neuesten Lösung umgehen das Problem für mich. (Visual Studio 2013 Ultimate)
quelle
Ich bin auf dasselbe gestoßen, als ich in VS2017 Xamarin-Apps entwickelt habe.
Es war zufällig Windows Defender, der die exe / dll mit devenv.exe sperrte.
Sie können zu Win Defender gehen und hinzufügen
zur Prozessausschlussliste.
quelle
Dies ist die Lösung, die ich herausfinde
Hinweis: Sie können diese Option ohne Probleme wieder aktivieren.
quelle
Ich konnte dieses Problem beheben, indem ich das Echtzeit-Scannen von McAfee LiveSafe deaktivierte. Meine EXE-Datei würde sich wie im OP beschrieben abstürzen und ich hätte keine Möglichkeit, die Datei zu entfernen, was bedeutete, dass ich die Lösung nicht erstellen konnte. Nach dem Deaktivieren der McAfee-Funktion war das Problem behoben.
Dann habe ich natürlich McAfee vollständig deinstalliert, das nur installiert wurde, weil mein PC neu ist und das Programm bereits installiert war.
quelle
Ich habe eine neue leere Lösung erstellt und alle alten Dateien hinzugefügt. Dies löste irgendwie das Problem.
quelle