Que signifie «sortie avec le code 9009» pendant cette construction?

292

Que veux dire ce message d'erreur? Que puis-je faire pour corriger ce problème?

AssemblyInfo.cs est sorti avec le code 9009


Le problème se produit probablement dans le cadre d'une étape de post-génération dans une solution .NET dans Visual Studio.

Anthony Mastrean
la source
7
L'OP ne revient pas pour résoudre ce problème, mais il a beaucoup de réponses et beaucoup de jus de Google. Alors essayons de déduire le problème?
Anthony Mastrean
13
La fenêtre de sortie m'a donné un aperçu de ce problème que je rencontrais également
hanzolo

Réponses:

241

Avez-vous essayé de donner le chemin complet de la commande qui s'exécute dans la commande d'événement pré ou post-génération?

J'obtenais l'erreur 9009 en raison d'une xcopycommande d'événement post-génération dans Visual Studio 2008.

La commande s'est "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"terminée avec le code 9009.

Mais dans mon cas, c'était également intermittent. Autrement dit, le message d'erreur persiste jusqu'à un redémarrage de l'ordinateur et disparaît après un redémarrage de l'ordinateur. Il est de retour après un problème lié à distance que je n'ai pas encore découvert.

Cependant, dans mon cas, fournir la commande avec son chemin complet a résolu le problème:

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

Au lieu de simplement:

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

Si je n'ai pas le chemin complet, il s'exécute pendant un certain temps après un redémarrage, puis s'arrête.

Aussi, comme mentionné dans les commentaires de ce post, s'il y a des espaces dans le chemin complet, alors il faut des guillemets autour de la commande . Par exemple

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

Notez que cet exemple concernant les espaces n'est pas testé.

thehhv
la source
44
J'ai également reçu l'erreur 9009 lors des événements post et pre build. La vérification de l'onglet Sortie dans Visual Studio montre le problème. Dans mon cas, j'essayais d'accéder à un chemin contenant un espace
Phil Hale
16
J'ai eu un problème similaire à cela, mais c'était le résultat d'espaces dans les noms de dossier. Mettre les chemins entre guillemets ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") l'a résolu.
Justin Morgan
1
J'ai rencontré un problème similaire avec un événement de pré-génération qui utilisait une applet Java pour précompiler JS et CSS ... il s'avère que nous avions négligé de mettre Java Runtime sur le serveur.
saluce
2
Est-il possible que la PATHvariable d'environnement soit perdue d'une manière ou d'une autre? Je reçois cette erreur de temps en temps. J'ai npm installconfiguré en tant qu'événement de pré-construction, et initialement cela fonctionne (donc je suppose que tout est configuré), mais au hasard, il cessera de fonctionner pendant la journée (généralement lors du basculement entre les solutions / branches, je crois), et il ne sera plus savoir npm. Le redémarrage de VS le "corrige" ... ce qui signifie que mon PATHest correctement configuré, mais semble se lever par VS. S'il y avait un moyen de visualiser les variables env depuis VS, je pourrais le confirmer.
jamiebarrow
2
Si vous souhaitez protéger votre build contre les plantages dans différents environnements, disons que les fenêtres installées sur D: \, utilisez les variables d'environnement en conjonction avec @thehhv réponse:%systemroot%\System32\xcopy ...
Dorival
110

Le code d'erreur 9009 signifie que le fichier d'erreur est introuvable. Toutes les raisons sous-jacentes affichées dans les réponses ici sont une bonne inspiration pour comprendre pourquoi, mais l'erreur elle-même signifie simplement un mauvais chemin.

Chris Moschini
la source
1
Mon problème avec le fichier introuvable était la référence dans le fichier csproj était $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc et devait être $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD
Merci d'avoir répondu à la première question.
AntonK
Et cela signifie ne trouver aucun fichier que la commande tentée peut impliquer, donc même quand elle n'a pas pu trouver la commande elle-même. J'utilisais supprimer au lieu de supprimer. Cela vous donnerait aussi un 9009.
Mircea Ion
84

Cela se produit lorsque certains paramètres d'environnement manquent pour utiliser les outils Microsoft Visual Studio x86.
Par conséquent, essayez d'ajouter en tant que première commande dans vos étapes de post-génération:

Pour l'utilisation de Visual Studio 2010:

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

Comme @FlorianKoch l'a mentionné dans les commentaires, pour VS 2017, utilisez:

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

Il doit être placé avant toute autre commande.
Il définira l'environnement d'utilisation des outils Microsoft Visual Studio x86.

HRKoder
la source
3
Pourriez-vous m'aider - où et dans quel fichier dois-je ajouter la ligne call "$(DevEnvDir)..\Tools\vsvars32.bat"? Merci
surfmuggle
2
J'ai dû ajouter une entrée à ma Pathvariable d'environnement. Vérifiez la fenêtre Sortie pour plus d'informations.
paqogomez
Mise en garde. Cela échouera sur de nombreux serveurs de build: blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful
George Mauer
2
Merci, pour la chaîne d'outils x64 bits, j'ai résolu comme suit: "$ (DevEnvDir) .. \ VC \ vcvarsall.bat"
codekiddy
1
Pour VS 2017, le fichier est"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch
57

Très probablement, vous avez de l'espace dans votre chemin résultant.

Vous pouvez contourner cela en citant les chemins, permettant ainsi des espaces. Par exemple:

xcopy "$(SolutionDir)\Folder Name\File To Copy.ext" "$(TargetDir)" /R /Y /I
NileshChauhan
la source
9
+1 - C'est exactement le problème que j'avais. Une commande dans ma post-génération a fonctionné lorsque j'ai généré le projet localement, mais a échoué lors de sa génération sur le serveur de génération. Je viens de placer la commande entre guillemets doubles pour le corriger. Merci.
sheikhjabootie
Est-il donc raisonnable de supposer que l'erreur 9009 est "fichier introuvable" ...? Personnellement, je pense que la question "qu'est-ce que l'erreur MSBuild 9009?" devrait être parfaitement bien comme une question autonome, mais adressée à Microsoft!
The Dag
11

Avait la même variable après avoir changé la variable PATH à partir des variables environnementales dans Win 7. Le retour à la valeur par défaut a aidé.

Radomir Szewczyk
la source
10

J'ai rencontré l'erreur 9009 lorsque mon script d'événement post-génération a tenté d'exécuter un fichier de commandes qui n'existait pas dans le chemin spécifié.

SleepyBoBos
la source
6

J'ai provoqué cette erreur lorsque j'ai expurgé ma variable d'environnement Path. Après l'édition, j'ai accidentellement ajoutéPath= au début de la chaîne de chemin. Avec une telle variable de chemin mal formée, je n'ai pas pu exécuter XCopy sur la ligne de commande (aucune commande ou fichier introuvable) et Visual Studio a refusé d'exécuter l'étape post-génération, citant une erreur avec le code 9009.

XCopy réside généralement dans C: \ Windows \ System32. Une fois que la variable d'environnement Path a permis à XCopy d'être résolu à l'invite DOS, Visual Studio a bien construit ma solution.

GregC
la source
6

Mon erreur exacte était

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

9009 signifie fichier introuvable, mais il n'a pas pu trouver la partie "iscc" de la commande.

Je l'ai corrigé en ajoutant ";C:\Program Files\Inno Setup 5 (x86)\"à la variable d'environnement système"path"

scw
la source
5

Si le script fait ce qu'il doit faire et que c'est juste Visual Studio qui vous dérange sur l'erreur que vous pouvez simplement ajouter:

exit 0

à la fin de votre script.

hakksor
la source
5
cacher toute erreur potentielle ne devrait pas être la voie à suivre
igelineau
1
Je suis d'accord que cela ne devrait pas être masqué
AltF4_
5

Vérifier l'orthographe. J'essayais d'appeler un exécutable mais le nom était mal orthographié et cela m'a donné le exited with code 9009message.

marque
la source
1
Ajoutez à cela une vérification de l'existence de l'exécutable sur votre système.
Joshua Drake
5

Dans mon cas, j'ai dû "CD" (Changer de répertoire) dans le répertoire approprié avant d'appeler la commande, car l'exécutable que j'appelais était dans mon répertoire de projet.

Exemple:

cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"
Mathias Lykkegaard Lorenzen
la source
1
Cela a résolu le problème pour moi en exécutant devenv.exe de Visual Studio, mais vous n'avez pas besoin de spécifier le dossier la deuxième fois, just'call build.bat le fera
FrinkTheBrave
4

Une autre variante:

aujourd'hui j'appelle l'interpréteur python de cron dans win32 et je prends ExitCode (% ERRORLEVEL%) 9009, car le compte système utilisé par cron n'a pas de chemin vers le répertoire Python.

Denis Barmenkov
la source
4

Le problème dans mon cas s'est produit lorsque j'ai essayé d'utiliser une commande sur la ligne de commande pour l'événement Post-build dans ma bibliothèque de classes de test. Lorsque vous utilisez des guillemets comme ceci:

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

ou si vous utilisez la console:

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

Cela a résolu le problème pour moi.

pdvries
la source
4

La réponse de tfa a été déclassée, mais peut en fait provoquer ce problème. Grâce à hanzolo, j'ai regardé dans la fenêtre de sortie et j'ai trouvé ce qui suit:

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.

Après avoir exécuté npm install -g gulp, j'ai cessé de recevoir cette erreur. Si vous obtenez cette erreur dans Visual Studio, vérifiez la fenêtre de sortie et voyez si le problème est une variable d'environnement non définie.

R. Salisbury
la source
3

Assurez-vous également qu'il n'y a pas de sauts de ligne dans la fenêtre d'édition d'événement post-génération de votre projet. Parfois, la copie de la commande xcopy à partir du Web lorsqu'elle est multiligne et la collant dans VS provoquera un problème.

jesse p
la source
Bien que jesse fasse un bon point sur le fait de ne pas avoir de sauts de ligne au milieu d'une commande xcopy, notez que dans le cas général, il est valide d'avoir des sauts de ligne dans ce champ; chaque ligne doit être interprétée comme sa propre commande.
RJFalconer
3

J'ai ajouté "> monFichier.txt" à la fin de la ligne dans l'étape de pré-génération, puis j'ai inspecté le fichier pour rechercher l'erreur réelle.

Philippe
la source
2

Pour moi, l'espace disque était faible et les fichiers qui ne pouvaient pas être écrits devaient être présents plus tard. D'autres réponses mentionnaient des fichiers manquants (ou des fichiers mal nommés / mal référencés par leur nom) - mais la cause principale était le manque d'espace disque.

ErikE
la source
2

Pour moi, cela s'est produit après la mise à niveau des packages de pépites d'une version PostSharp à la suivante dans une grande solution (~ 80 projets). J'ai des erreurs de compilation pour les projets qui ont des commandes dans les événements PreBuild.

'cmd' n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes. C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1249,5): erreur MSB3073: La commande "cmd / c C: \ GitRepos \ main \ ServiceInterfaces \ DEV.Config \ PreBuild.cmd ServiceInterfaces "est sorti avec le code 9009.

La variable PATH était corrompue et devenait trop longue avec plusieurs chemins répétés liés à PostSharp.Patterns.Diagnostics. Lorsque j'ai fermé Visual Studio et l'ai rouvert, le problème a été résolu.

Michael Freidgeim
la source
2

Encore une autre variante de fichier introuvable, à cause des espaces dans le chemin. Dans mon cas, dans le script msbuild. J'avais besoin d'utiliser le style HTML & quot; chaînes dans la commande 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
la source
2

Identique aux autres réponses, dans mon cas, c'était à cause du fichier manquant. Pour savoir quel est le fichier manquant, vous pouvez aller dans la fenêtre de sortie et il vous montrera immédiatement ce qui a disparu.

Pour ouvrir la fenêtre de sortie dans Visual Studio:

  1. Ctrl + Alt + O
  2. Affichage> Sortie

entrez la description de l'image ici

Marvin Glenn Lacuna
la source
2

J'ai corrigé cela en redémarrant simplement Visual Studio - je venais de lancer dotnet tool install xxxdans une fenêtre de console et VS n'avait pas encore récupéré les nouvelles variables d'environnement et / ou les paramètres de chemin qui ont été modifiés, donc un redémarrage rapide a résolu le problème.

keithl8041
la source
1

C'est assez basique, j'ai eu ce problème et un simple échec embarrassant.

L'application utilise des arguments de ligne de commande, je les ai supprimés puis ajoutés à nouveau. Soudain, le projet n'a pas pu être construit.

Visual Studio -> Propriétés du projet -> vérifiez que vous utilisez l'onglet 'Debug' (pas l'onglet 'Build Events') -> Arguments de ligne de commande

J'ai utilisé la zone de texte et Post / Pre-build, ce qui était faux dans ce cas.

Niike2
la source
1

Ma solution était simple: avez-vous essayé de l'éteindre et de la rallumer? J'ai donc redémarré l'ordinateur et le problème avait disparu.

krzyszt0fd
la source
1

J'ai également rencontré ce 9009problème face à une situation d'écrasement.

Fondamentalement, si le fichier existe déjà et que vous n'avez pas spécifié le /ycommutateur (qui écrase automatiquement), cette erreur peut se produire lors de l'exécution à partir d'une génération.

Travis Vroman
la source
0

En fait, j'ai remarqué que pour une raison quelconque, la variable d'environnement% windir% est parfois effacée. Ce qui a fonctionné pour moi a été de redéfinir la variable d'environnement windir sur c: \ windows, de redémarrer VS, et c'est tout. De cette façon, vous évitez d'avoir à modifier les fichiers de solution.

Charles F
la source
0

Au moins dans Visual Studio Ultimate 2013, version 12.0.30723.00 Update 3, il n'est pas possible de séparer une instruction if / else avec un saut de ligne:

travaux:

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

ne fonctionne pas:

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

Encore une autre raison: si votre événement de pré-génération fait référence à un autre chemin bin de projets et que vous voyez cette erreur lors de l'exécution de msbuild, mais pas de Visual Studio, vous devez alors organiser manuellement les projets dans le fichier * .sln (avec un éditeur de texte) afin que le projet que vous ciblez dans l'événement est créé avant le projet de l'événement. En d'autres termes, msbuild utilise l'ordre dans lequel les projets sont répertoriés dans le fichier * .sln tandis que VS utilise la connaissance des dépendances de projet. J'ai eu cela quand un outil qui crée une base de données à inclure dans un wixproj a été répertorié après le wixproj.

Novaterata
la source
0

Je pense que dans mon cas, il y avait des symboles russes dans le chemin (tous les projets étaient dans le dossier utilisateur). Quand j'ai mis la solution dans un autre dossier (directement sur le disque), tout s'est bien passé.

Dmitriy Dokshin
la source
0

Ma solution était de créer une copie du fichier et d'ajouter une étape à la tâche de génération pour copier mon fichier sur l'original.

johnrizzo1
la source
0

Vous devez vous assurer que vous avez installé grunt à l'échelle mondiale

tfa
la source