Ich versuche, während eines Pre-Build-Ereignisses eine Batch-Datei auszuführen. Ich habe ein neues Projekt und habe foo.bat hinzugefügt. Die Datei enthält die folgende Zeile:
%Vor%Wenn ich die Befehlszeile für den Pre-Build-Event auf foo.bat setze, erhalte ich den folgenden Fehler:
Der Befehl "foo.bat" wurde mit dem Code 9009 beendet.
Wenn ich die Befehlszeile für den Pre-Build-Event auf call foo.bat setze, erhalte ich den folgenden Fehler:
Der Befehl "call foo.bat" wurde mit Code 1 beendet.
Alles, was ich im Zusammenhang mit diesen Codes gelesen habe, weist im Allgemeinen darauf hin, dass ein Problem mit dem Inhalt der Batch-Datei vorliegt (in diesem Fall nicht wahrscheinlich) oder dass das System die Batch-Datei nicht finden kann.
Die Batch-Datei funktioniert problemlos über eine Eingabeaufforderung. Dinge, die ich schon ausprobiert habe: Erstellt die Datei mit verschiedenen Werkzeugen, verschiedenen Kodierungen, Platziere Exit 0 in der Datei, verschiedene Build-Aktionen für die Datei und kopiere die Datei in das Ausgabeverzeichnis. Alles ohne Glück.
Was vermisse ich? Es muss etwas Einfaches sein.
Update: Ja, es war einfach - die Länge des Pfades war zu lang. Details finden Sie in der Antwort.
Danke!
Mein Problem scheint die Länge des Pfades zur Batch-Datei zu sein. Da dies ein Beweis des Konzepts war, ließ ich es am Standardort erstellen:
C: \ Dokumente und Einstellungen \ UserXXX \ Meine Dokumente \ Visual Studio 2010 \ Projekte \ SolutionXXX \ ProjectXXX \ foo.bat
Sobald ich die Lösung an einen Ort mit einem kürzeren Pfad verschoben habe, funktionierte es einwandfrei. = P
Danke für die Vorschläge!
Es ist möglich, dass Sie irgendwo in foo.bat
ein anderes PATH
haben. Versuchen Sie, den vollständigen Pfad zu Ihrer Batchdatei wie C:\Path\to\foo.bat
anzugeben.
Wenn das Projekt erstellt wird, ist das aktuelle Verzeichnis das Verzeichnis mit der Datei .vcproj
. Der Befehlspfad sollte relativ zu diesem Verzeichnis angegeben werden, wenn er nicht in PATH
enthalten ist.
Eine weitere Möglichkeit, das Problem zu diagnostizieren, wäre cmd
im Befehl pre-build event explizit wie folgt anzugeben:
oder sogar
%Vor%Ich habe das Problem gelöst, indem ich die .bat-Datei aus Windows Explorer erstellt habe und sie dann wiederum in mein Projekt eingefügt habe, anstatt direkt in VS 2010 zu erstellen.
Das aktuelle Arbeitsverzeichnis der Pre-Build- und Post-Build-Ereignisse ist das Ausgabeverzeichnis, das vom Makro $ (OutDir) angegeben wird, nicht das Projektverzeichnis.
Die folgenden Tags in "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets" geben Folgendes an:
%Vor%Das Problem, das ich vermute, ist, dass sich in Ihrem Ordnerpfad ein Leerzeichen befindet.
Also wird dieser Befehl wahrscheinlich für c:\development\projectABC\foo.bat
funktionieren, aber nicht für c:\development\project ABC\foo.bat
Zumindest war das das Problem für mich, es könnte andere Probleme geben, aber ich vermute, dass dies am häufigsten ist. Die Lösung: Setzen Sie Anführungszeichen um Ihren Batch-Aufruf:
%Vor%Klicken Sie mit der rechten Maustaste auf das Projekt - & gt; Eigenschaften auswählen - & gt; build event tab auswählen Löschen Sie die Pre-Build-Ereigniskommentarzeilen.
Tags und Links c# visual-studio-2010