Was bedeutet "mit Code 9009 beendet" während dieses Builds?

292

Was bedeutet diese Fehlermeldung? Was kann ich tun, um dieses Problem zu beheben?

AssemblyInfo.cs wurde mit dem Code 9009 beendet


Das Problem tritt wahrscheinlich im Rahmen eines Post-Build-Schritts in einer .NET-Lösung in Visual Studio auf.

Anthony Mastrean
quelle
7
Das OP kommt nicht zurück, um dieses Problem zu beheben, aber es hat viele Antworten und viel Google-Saft. Versuchen wir also, auf das Problem zu schließen.
Anthony Mastrean
13
Das Ausgabefenster gab mir einen Einblick in dieses Problem, das ich auch hatte
Hanzolo

Antworten:

241

Haben Sie versucht, den vollständigen Pfad des Befehls anzugeben, der im Ereignisbefehl vor oder nach dem Build ausgeführt wird?

Ich habe den 9009-Fehler aufgrund eines xcopyEreignisbefehls nach dem Erstellen in Visual Studio 2008 erhalten.

Der Befehl wurde "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"mit dem Code 9009 beendet.

Aber in meinem Fall war es auch zeitweise. Das heißt, die Fehlermeldung bleibt bis zu einem Neustart des Computers bestehen und verschwindet nach einem Neustart des Computers. Es ist zurück nach einem entfernt verwandten Problem, das ich noch entdecken muss.

In meinem Fall wurde das Problem jedoch behoben, indem der Befehl mit seinem vollständigen Pfad versehen wurde:

c:\windows\system32\xcopy.exe /Y C:\projectpath\project.config C:\compilepath\ 

Anstatt nur:

xcopy.exe /Y C:\projectpath\project.config C:\compilepath\

Wenn ich nicht den vollständigen Pfad habe, wird er nach einem Neustart eine Weile ausgeführt und dann angehalten.

Wie in den Kommentaren zu diesem Beitrag erwähnt, benötigt man Anführungszeichen um den Befehl , wenn Leerzeichen im vollständigen Pfad vorhanden sind . Z.B

"C:\The folder with spaces\ABCDEF\xcopy.exe" /Y C:\projectpath\project.config C:\compilepath\

Beachten Sie, dass dieses Beispiel in Bezug auf Leerzeichen nicht getestet wird.

thehhv
quelle
44
Ich habe auch den 9009-Fehler bei Post- und Pre-Build-Ereignissen erhalten. Wenn Sie die Registerkarte Ausgabe in Visual Studio überprüfen, wird das Problem angezeigt. In meinem Fall habe ich versucht, auf einen Pfad zuzugreifen, der ein Leerzeichen enthält
Phil Hale
16
Ich hatte ein ähnliches Problem, aber es war das Ergebnis von Leerzeichen in den Ordnernamen. Das Einfügen der Pfade in Anführungszeichen ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") hat das Problem behoben.
Justin Morgan
1
Ich habe ein ähnliches Problem mit einem Pre-Build-Ereignis festgestellt, bei dem ein Java-Applet zum Vorkompilieren von JS und CSS verwendet wurde. Es stellte sich heraus, dass wir es versäumt hatten, die Java-Laufzeit auf den Server zu stellen.
Saluce
2
Ist es möglich, dass die PATHUmgebungsvariable irgendwie verloren geht? Ich bekomme diesen Fehler hin und wieder. Ich habe npm installSetup als Pre-Build-Ereignis eingerichtet und es funktioniert zunächst (ich gehe also davon aus, dass alles eingerichtet ist), aber dann funktioniert es zufällig tagsüber nicht mehr (im Allgemeinen, wenn ich zwischen Lösungen / Zweigen wechsle), und es funktioniert nicht mehr wissen über npm. Ein Neustart von VS 'behebt' es ... was bedeutet, dass my PATHkorrekt eingerichtet ist, aber von VS aufzustehen scheint. Wenn es eine Möglichkeit gäbe, die env-Variablen in VS anzuzeigen, könnte ich dies bestätigen.
Jamie Barrow
2
Wenn Sie Ihren Build vor Abstürzen in verschiedenen Umgebungen schützen möchten, z. B. Windows, das unter D: \ installiert ist, verwenden Sie Umgebungsvariablen in Verbindung mit der Antwort von @thehhv:%systemroot%\System32\xcopy ...
Dorival
110

Fehlercode 9009 bedeutet, dass die Fehlerdatei nicht gefunden wurde. Alle zugrunde liegenden Gründe, die in den Antworten hier aufgeführt sind, sind eine gute Inspiration, um herauszufinden, warum, aber der Fehler selbst bedeutet einfach einen schlechten Weg.

Chris Moschini
quelle
1
Mein Problem mit der nicht gefundenen Datei war, dass die Referenz in der csproj-Datei $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc war und $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD
Vielen Dank, dass Sie die erste Frage tatsächlich beantwortet haben.
AntonK
Und es bedeutet, dass keine Datei gefunden wird, an der der versuchte Befehl beteiligt sein könnte, selbst wenn der Befehl selbst nicht gefunden werden konnte. Ich habe delete anstelle von del verwendet. Das würde dir auch einen 9009 geben.
Mircea Ion
84

Dies passiert, wenn einige Umgebungseinstellungen für die Verwendung von Microsoft Visual Studio x86-Tools fehlen.
Versuchen Sie daher, als ersten Befehl in Ihren Schritten nach dem Erstellen Folgendes hinzuzufügen:

Verwenden Sie für Visual Studio 2010:

call "$(DevEnvDir)..\Tools\vsvars32.bat"

Wie @FlorianKoch in den Kommentaren erwähnt, verwenden Sie für VS 2017:

call "$(DevEnvDir)..\Tools\VsDevCmd.bat"

Es sollte vor jedem anderen Befehl stehen.
Es wird die Umgebung für die Verwendung von Microsoft Visual Studio x86-Tools festgelegt.

HRKoder
quelle
3
Könnten Sie mir helfen - wo und in welche Datei muss ich die Zeile call "$(DevEnvDir)..\Tools\vsvars32.bat"einfügen? Danke
surfmuggle
2
Ich musste meiner PathUmgebungsvariablen einen Eintrag hinzufügen . Überprüfen Sie das Ausgabefenster auf weitere Informationen.
Paqogomez
Vorsicht. Dies wird auf vielen Build-Servern fehlschlagen
George Mauer
2
Vielen Dank für die x64-Bit-Toolchain, die ich wie folgt gelöst habe: "$ (DevEnvDir) .. \ VC \ vcvarsall.bat"
Codekiddy
1
Für VS 2017 ist die Datei"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch
57

Höchstwahrscheinlich haben Sie Platz in Ihrem resultierenden Pfad.

Sie können dies umgehen, indem Sie die Pfade in Anführungszeichen setzen und so Leerzeichen zulassen. Beispielsweise:

xcopy "$(SolutionDir)\Folder Name\File To Copy.ext" "$(TargetDir)" /R /Y /I
NileshChauhan
quelle
9
+1 - Dies ist genau das Problem, das ich hatte. Ein Befehl in meinem Post-Build funktionierte, als ich das Projekt lokal erstellte, schlug jedoch fehl, als es auf dem Build-Server erstellt wurde. Ich habe den Befehl nur zwischen doppelte Anführungszeichen gesetzt, um das Problem zu beheben. Vielen Dank.
Sheikhjabootie
Ist es also vernünftig zu spekulieren, dass der Fehler 9009 "Datei nicht gefunden" ist? Persönlich denke ich die Frage "Was ist MSBuild Fehler 9009?" sollte als eigenständige Frage vollkommen in Ordnung sein, aber an Microsoft gerichtet!
Der
11

Hatte dieselbe Variable nach dem Ändern der PATH-Variablen von Umgebungsvariablen in Win 7. Das Zurücksetzen auf die Standardeinstellung hat geholfen.

Radomir Szewczyk
quelle
10

Ich hatte den Fehler 9009, als mein Post-Build-Ereignisskript versuchte, eine Batchdatei auszuführen, die im angegebenen Pfad nicht vorhanden war.

SleepyBoBos
quelle
6

Ich habe diesen Fehler verursacht, als ich meine Umgebungsvariable Path redigiert habe. Nach der Bearbeitung habe ich versehentlich Path=den Anfang der Pfadzeichenfolge hinzugefügt . Mit einer solchen fehlerhaften Pfadvariablen konnte ich XCopy nicht über die Befehlszeile ausführen (kein Befehl oder keine Datei nicht gefunden), und Visual Studio lehnte es ab, den Schritt nach dem Erstellen auszuführen, wobei ein Fehler mit Code 9009 angeführt wurde.

XCopy befindet sich normalerweise in C: \ Windows \ System32. Nachdem die Umgebungsvariable Path die Auflösung von XCopy an der DOS-Eingabeaufforderung ermöglicht hatte, hat Visual Studio meine Lösung gut erstellt.

GregC
quelle
6

Mein genauer Fehler war

The command "iscc /DConfigurationName=Debug "C:\Projects\Blahblahblah\setup.iss"" exited with code 9009.

9009 bedeutet, dass die Datei nicht gefunden wurde, der "iscc" -Teil des Befehls jedoch nicht gefunden werden konnte.

Ich habe es behoben, indem ich es ";C:\Program Files\Inno Setup 5 (x86)\"der Systemumgebungsvariablen hinzugefügt habe"path"

scw
quelle
5

Wenn das Skript tatsächlich das tut, was es tun muss, und Visual Studio Sie nur wegen des Fehlers nervt, können Sie einfach Folgendes hinzufügen:

exit 0

bis zum Ende Ihres Skripts.

Hakksor
quelle
5
Das Ausblenden eines möglichen Fehlers sollte nicht der
richtige
1
Ich bin damit einverstanden, dass dies nicht maskiert werden sollte
AltF4_
5

Prüfe die Rechtschreibung. Ich habe versucht, eine ausführbare Datei aufzurufen, aber der Name war falsch geschrieben und es gab mir die exited with code 9009Nachricht.

Kennzeichen
quelle
1
Fügen Sie dazu eine Überprüfung auf das Vorhandensein der ausführbaren Datei auf Ihrem System hinzu.
Joshua Drake
5

In meinem Fall musste ich zuerst "CD" (Change Directory) in das richtige Verzeichnis, bevor ich den Befehl aufrief, da sich die von mir aufgerufene ausführbare Datei in meinem Projektverzeichnis befand.

Beispiel:

cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"
Mathias Lykkegaard Lorenzen
quelle
1
Dies behebt das Problem, dass ich die devenv.exe von Visual Studio ausführe, aber Sie müssen den Ordner nicht das zweite Mal angeben, sondern nur build.bat aufrufen
FrinkTheBrave
4

Eine andere Variante:

Heute rufe ich den Python-Interpreter von cron in win32 auf und nehme ExitCode (% ERRORLEVEL%) 9009, weil das von cron verwendete Systemkonto keinen Pfad zum Python-Verzeichnis hat.

Denis Barmenkov
quelle
4

Das Problem in meinem Fall trat auf, als ich versuchte, einen Befehl in der Befehlszeile für das Post-Build-Ereignis in meiner Testklassenbibliothek zu verwenden. Wenn Sie solche Anführungszeichen verwenden:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit" "$(TargetPath)" 

oder wenn Sie die Konsole verwenden:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit-console" "$(TargetPath)"

Dies hat das Problem für mich behoben.

pdvries
quelle
4

Die Antwort von tfa wurde abgelehnt, kann aber tatsächlich dieses Problem verursachen. Dank hanzolo habe ich in das Ausgabefenster geschaut und Folgendes festgestellt:

3>'gulp' is not recognized as an internal or external command,
3>operable program or batch file.
3>D:\dev\<filepath>\Web.csproj(4,5): error MSB3073: The command "gulp clean" exited with code 9009.

Nach dem Ausführen npm install -g gulpwurde dieser Fehler nicht mehr angezeigt. Wenn dieser Fehler in Visual Studio auftritt, überprüfen Sie das Ausgabefenster und prüfen Sie, ob das Problem eine nicht festgelegte Umgebungsvariable ist.

R. Salisbury
quelle
3

Stellen Sie außerdem sicher, dass das Bearbeitungsfenster für Ereignisse nach dem Erstellen Ihres Projekts keine Zeilenumbrüche enthält. Manchmal verursacht das Kopieren des Befehls xcopy aus dem Web, wenn er mehrzeilig ist, und das Einfügen in VS ein Problem.

jesse p
quelle
Obwohl Jesse es gut macht, keine Zeilenumbrüche in der Mitte eines xcopy-Befehls zu haben, beachten Sie, dass es im allgemeinen Fall gültig ist, Zeilenumbrüche in diesem Feld zu haben. Jede Zeile sollte als eigener Befehl interpretiert werden.
RJFalconer
3

Ich habe im Vorerstellungsschritt am Ende der Zeile "> myFile.txt" hinzugefügt und dann die Datei auf den tatsächlichen Fehler überprüft.

Philip
quelle
2

Für mich war der Speicherplatz gering, und Dateien, die nicht geschrieben werden konnten, sollten später vorhanden sein. Andere Antworten erwähnten fehlende Dateien (oder falsch benannte / falsch referenzierte Dateien mit Namen) - aber die Hauptursache war mangelnder Speicherplatz.

ErikE
quelle
2

Für mich geschah dies nach dem Upgrade von Nuget-Paketen von einer PostSharp-Version auf die nächste in einer großen Lösung (~ 80-Projekt). Ich habe Compilerfehler für Projekte, die Befehle in PreBuild-Ereignissen haben.

'cmd' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt. C: \ Programme (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1249,5): Fehler MSB3073: Der Befehl "cmd / c C: \ GitRepos \ main \ ServiceInterfaces \ DEV.Config \ PreBuild.cmd ServiceInterfaces "wurde mit dem Code 9009 beendet.

Die Variable PATH wurde beschädigt und wurde zu lang, da sich mehrere Pfade auf PostSharp.Patterns.Diagnostics bezogen. Als ich Visual Studio schloss und wieder öffnete, wurde das Problem behoben.

Michael Freidgeim
quelle
2

Eine weitere Variante der Datei wurde aufgrund von Leerzeichen im Pfad nicht gefunden. In meinem Fall im msbuild-Skript. Ich musste den HTML-Stil & quot; Zeichenfolgen innerhalb des Befehls exec.

<!-- Needs quotes example with my Buildscript.msbuild file --> 
<Exec Command="&quot;$(MSBuildThisFileDirectory)\wix\wixscript.bat&quot; $(VersionNumber) $(VersionNumberShort)" 
    ContinueOnError="false" 
    IgnoreExitCode="false" 
    WorkingDirectory="$(MSBuildProjectDirectory)\wix" />
Ben Butzer
quelle
2

Wie bei den anderen Antworten lag es in meinem Fall an der fehlenden Datei. Um zu wissen, was die fehlende Datei ist, können Sie zum Ausgabefenster gehen und es zeigt Ihnen sofort, was fehlte.

So öffnen Sie das Ausgabefenster in Visual Studio:

  1. Strg + Alt + O.
  2. Ansicht> Ausgabe

Geben Sie hier die Bildbeschreibung ein

Marvin Glenn Lacuna
quelle
2

Ich habe dies behoben, indem ich Visual Studio einfach neu gestartet habe. Ich habe gerade dotnet tool install xxxin einem Konsolenfenster ausgeführt und VS hat die neuen Umgebungsvariablen und / oder Pfadeinstellungen, die geändert wurden, noch nicht übernommen. Ein schneller Neustart hat das Problem behoben.

keithl8041
quelle
1

Das ist ziemlich einfach, ich hatte dieses Problem und peinliche einfache Fehler.

Anwendung verwenden Befehlszeilenargumente, ich habe sie entfernt und dann wieder hinzugefügt. Plötzlich konnte das Projekt nicht mehr erstellt werden.

Visual Studio -> Projekteigenschaften -> Vergewissern Sie sich, dass Sie die Registerkarte "Debug" (nicht die Registerkarte "Build Events") verwenden -> Befehlszeilenargumente

Ich habe den Textbereich und Post / Pre-Build verwendet, was in diesem Fall falsch war.

Niike2
quelle
1

Meine Lösung war einfach: Haben Sie versucht, sie aus- und wieder einzuschalten? Also habe ich den Computer neu gestartet und das Problem war behoben.

krzyszt0fd
quelle
1

Ich bin auch auf dieses 9009Problem gestoßen, als ich mit einer Überschreibsituation konfrontiert war.

Grundsätzlich /ykann dieser Fehler auftreten , wenn die Datei bereits vorhanden ist und Sie den Schalter nicht angegeben haben (der automatisch überschreibt), wenn er von einem Build ausgeführt wird.

Travis Vroman
quelle
0

Eigentlich ist mir aufgefallen, dass aus irgendeinem Grund die Umgebungsvariable% windir% manchmal gelöscht wird. Was für mich funktioniert hat, war, die Windir-Umgebungsvariable auf c: \ windows zurückzusetzen, VS neu zu starten und fertig. Auf diese Weise müssen Sie die Lösungsdateien nicht ändern.

Charles F.
quelle
0

Zumindest in Visual Studio Ultimate 2013, Version 12.0.30723.00 Update 3, ist es nicht möglich, eine if / else-Anweisung durch einen Zeilenumbruch zu trennen:

funktioniert:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) else (echo server)

funktioniert nicht:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) 
else (echo server)
it-freelancer-magazin.de
quelle
0

Noch ein Grund: Wenn Ihr Pre-Build-Ereignis auf einen anderen Projekt-Bin-Pfad verweist und Sie diesen Fehler sehen, wenn Sie msbuild ausführen, aber nicht Visual Studio, müssen Sie die Projekte in der * .sln-Datei (mit einem Texteditor) manuell anordnen dass das Projekt, auf das Sie im Ereignis abzielen, vor dem Projekt des Ereignisses erstellt wird. Mit anderen Worten, msbuild verwendet die Reihenfolge, in der Projekte in der * .sln-Datei aufgeführt sind, während VS das Wissen über Projektabhängigkeiten verwendet. Ich hatte dies, als ein Tool, das eine Datenbank erstellt, die in ein wixproj aufgenommen werden soll, nach dem wixproj aufgelistet wurde.

Novaterata
quelle
0

Ich denke in meinem Fall waren russische Symbole im Pfad (alle Projekte befanden sich im Benutzerordner). Als ich die Lösung in einen anderen Ordner legte (direkt auf die Festplatte), wurde alles in Ordnung.

Dmitriy Dokshin
quelle
0

Meine Lösung bestand darin, eine Kopie der Datei zu erstellen und der Erstellungsaufgabe einen Schritt hinzuzufügen, um meine Datei über das Original zu kopieren.

johnrizzo1
quelle
0

Sie müssen sicherstellen, dass Sie grunt global installiert haben

tfa
quelle