116 votes

Post Build s'est terminé avec le code 1

J'ai un projet avec un événement post-construction :

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)

Il fonctionne bien à chaque fois sur ma machine. J'ai un nouveau développeur qui obtient toujours l'erreur "exited with code 1". Je lui ai demandé d'exécuter la même commande dans une invite DOS, et cela a bien fonctionné. Quelle pourrait être la cause de ce problème ? Existe-t-il un moyen d'accéder à la véritable erreur ?

Nous utilisons tous deux Visual Studio 2008.

0 votes

Dans mon cas, la réponse que Tim Scott fournit vers la fin de cette page (donc je néglige le début) résout mon problème.

121voto

Tim Scott Points 7043

Il y avait un espace dans l'un des noms de dossier de son chemin, sans guillemets.

14 votes

Mettre des guillemets aux noms de chemins est une bonne pratique. ne pas travailler dans des chemins qui contiennent des espaces est encore mieux :-)

5 votes

Copy /y "$(TargetDir)Dotfuscated\" "$(TargetDir)" cette commande ne fonctionne pas pour moi et si j'écris exit 0 à la fin alors tout fonctionne bien. pouvez-vous me dire pourquoi ?

60voto

JanBorup Points 557

Celui avec les "Pings" m'a aidé... mais peut être expliqué un peu mieux...

Pour moi, la solution était de changer :

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

à ça :

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

J'espère que cela vous conviendra. :-)

60voto

Valamas - AUS Points 8359

J'ai ajouté ceci pour les futurs visiteurs, car cette question est très active.

ROBOCOPY sort avec des "codes de succès" qui sont inférieurs à 8. Voir : http://support.microsoft.com/kb/954404

Cela signifie que :

robocopy exit code 0 = no files copied
robocopy exit code 1 = files copied
When the result is 1, this becomes an error exit code in visual studio.

J'ai donc résolu ce problème facilement en ajoutant ceci au bas du fichier batch

exit 0

Suggérer de traiter les erreurs ROBOCOPY de cette manière

rem each robocopy statement and then underneath have the error check.
if %ERRORLEVEL% GEQ 8 goto failed

rem end of batch file
GOTO success

:failed
rem do not pause as it will pause msbuild.
exit 1

:success
exit 0    

La confusion s'installe lorsqu'aucun fichier n'est copié = aucune erreur dans VS. Puis, lorsqu'il y a des changements, les fichiers sont copiés, VS se trompe mais tout ce que le développeur voulait a été fait.

Conseil supplémentaire : N'utilisez pas de pause dans le script car cela deviendrait une pause indéfinie dans le build VS. Pendant le développement du script, utilisez quelque chose comme . timeout 10 . Vous le remarquerez et le commenterez plutôt que d'avoir une construction en suspens.

5 votes

Juste ce que je cherchais. Merci !

1 votes

Je remets sur le tapis une réponse vieille de 8 ans pour dire que, si vous voulez une ligne unique, et non un fichier bat, vous pouvez ajouter un "& exit 0" à la fin de la chaîne d'événement post-construction.

1 votes

En ajoutant "exit 0" en bas, ça a bien marché. Et, à mon avis, cela semble être une bonne solution puisque nous pouvons voir le journal pour le problème réel si quelque chose se produit.

47voto

Shalini Points 231

La raison pour laquelle j'ai utilisé le code 1 était que le dossier cible était en lecture seule. J'espère que cela aidera quelqu'un ! J'avais un événement post-construction pour faire une copie d'un répertoire à un autre et la destination était en lecture seule. J'ai donc simplement décoché l'attribut lecture seule sur le répertoire et tous ses sous-répertoires ! Assurez-vous simplement que c'est un répertoire qui est sûr de le faire !

0 votes

J'ai gagné une heure, merci ! J'ai téléchargé du code sur Internet et Windows 7 met le dossier en lecture seule automatiquement.

1 votes

J'ai également utilisé xcopy à la place et avec le drapeau /y. Toutes les commandes microsoft.com/resources/documentation/Windows/xp/all/proddocs/

12voto

Asher Points 1280

Obtenez moniteur de processus de SysInternals le configurer de façon à ce que le Lunaverse.DbVerse (sur le champ Path) regarde le résultat de l'opération. Il devrait être évident à partir de là ce qui a mal tourné

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X