Post Build terminé avec le code 1

J’ai un projet avec un événement post construction:

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

Cela fonctionne bien à chaque fois sur ma machine. J’ai un nouveau développeur qui obtient toujours l’erreur “sorti avec le code 1”. Je l’ai fait exécuter la même commande dans une invite DOS, et ça a bien fonctionné. Qu’est-ce qui peut causer cela? Y a-t-il un moyen d’obtenir l’erreur réelle?

Nous utilisons tous les deux Visual Studio 2008.

Elle avait un espace dans l’un des noms de dossier sur son chemin et pas de guillemets.

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 

pour ça:

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

J’espère que ça marche pour toi. 🙂

Ma raison pour le code 1 était que le dossier cible était en lecture seule. J’espère que cela aide quelqu’un! J’ai eu un événement post-build pour faire une copie d’un répertoire vers un autre et la destination était en lecture seule. Je viens donc de décocher l’atsortingbut en lecture seule du répertoire et de tous ses sous-répertoires! Assurez-vous simplement que c’est un répertoire sûr à faire!

Je l’ai ajouté pour les futurs visiteurs car c’est une question assez active.

ROBOCOPY se ferme avec les “codes de réussite” 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. 

Donc, j’ai résolu ce problème facilement en ajoutant ceci au bas du fichier de commandes

 exit 0 

Suggère que gérer les erreurs ROBOCOPY de cette façon

 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 est établie lorsque aucun fichier n’est copié = aucune erreur dans VS. Ensuite, quand il y a des changements, les fichiers sont copiés, les erreurs VS, mais tout ce que le développeur voulait faire était fait.

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

Obtenir le moniteur de processus à partir de SysInternals configurez-le pour surveiller le Lunaverse.DbVerse (dans le champ Chemin) examine le résultat de l’opération. Il devrait être évident de là ce qui a mal tourné

J’ai dû exécuter VS en tant qu’administrateur pour que ma copie post-build sur un système d’exploitation protégé “.. \ Common7 \ IDE \ PrivateAssemblies” fonctionne.

Pour ceux qui utilisent la commande ‘ copy ‘ dans Build Events ( ligne de commande d’événement de pré-build ou / et ligne de commande d’événement post-build ) de Project -> Properties : les parameters de commande ‘ copy ‘ doivent ressembler à ceci: copy "source of files" "destination for files" . N’oubliez pas d’utiliser des guillemets (pour éviter les problèmes d’espaces dans les chaînes d’adresse).

J’ai pu corriger mon code 1 en exécutant Visual Studio en tant qu’administrateur. Apparemment, il n’a pas eu access à l’exécution des commandes shell sans Admin.

J’ai eu un problème similaire, mais spécifiquement dans un environnement de construction Jenkins. Pour résoudre le problème, je suis passé d’une commande de copie dans l’événement de post-génération à une cible de copie.

J’ai changé cela:

   copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml  

pour ça:

     

et ça marche très bien maintenant.

L’erreur spécifique que je recevais était:

 (PostBuildEvent target) -> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy   exited with code 1. [ 

En guise de bonne pratique, je vous suggère de remplacer l’événement post-build par une tâche MS Build File Copy .

Pour moi, je devais m’assurer que le programme vers lequel je copiais le fichier ne fonctionnait pas à ce moment-là. Il n’y avait aucune erreur dans la syntaxe. J’espère que cela aide quelqu’un.

Je viens de recevoir la même erreur. J’avais un% dans le chemin de destination qui devait être échappé

 c:\projects\%NotAnEnvironmentVariable% 

devait être

 c:\projects\%%NotAnEnvironmentVariable%% 

Ok, c’est un problème avec beaucoup de solutions, donc je poste juste le mien pour donner plus d’indices aux gens. Ma situation est de vérifier les dossiers sur votre chemin et assurez-vous qu’ils existent tous dans votre machine. Par exemple: “$ (SolutionDir) \ partBin \ Bin \ $ (NomProjet) .pdb”, mais “Bin” n’est pas dans le dossier partBin.

Pour ceux qui utilisent la commande ‘copy’ dans Build Events (ligne de commande d’événement de pré-build ou / et ligne de commande d’événement post-build) de Project -> Properties: le dossier cible doit exister

Tant de solutions …

Dans mon cas, je devais enregistrer le fichier bat avec un encodage non unicode (Western, Windows). Par défaut, lorsque j’ai ajouté le fichier à Visual Studio (et que j’aurais probablement dû le faire en dehors du VS), il a ajouté avec l’encodage UTF-8.

J’ai eu ce même problème et il s’est avéré que c’était parce que j’avais renommé le projet. Je suis allé dans les propriétés du projet et j’ai changé le nom de l’assembly et l’espace de noms racine au nom du projet et cela a fonctionné très bien après cela!

Encore une autre réponse …

Dans mon cas, j’ai eu un projet Visual Studio 2017 ciblant à la fois .Net Standard 1.3 et .Net Framework 2.0. Cela a été spécifié dans le fichier .csproj comme ceci:

 netstandard1.3;net20 

J’avais aussi une ligne de commande d’événement de post-construction comme celle-ci:

 copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\" 

En d’autres termes, j’essayais de copier le .Net Framework .dll produit par la construction vers un autre emplacement.

Cela a échoué avec cette erreur quand j’ai fait une reconstruction:

 MSB3073 The command "copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"" exited with code 1. 

Après beaucoup de frustration, j’ai finalement déterminé que ce qui se passait était que Rebuild supprimait tous les fichiers de sortie, puis faisait la compilation pour .Net Standard 1.3, puis essayait d’exécuter la ligne de commande des événements post-build, qui échouait parce que le fichier à copier n’a pas encore été construit.

La solution consistait donc à modifier l’ordre de création, c’est-à-dire à créer pour .Net Framework 2.0, puis pour .Net Standard 1.3.

 net20;netstandard1.3 

Cela fonctionne maintenant, avec le petit problème mineur que la ligne de commande de l’événement post-construction est exécuté deux fois, de sorte que le fichier est copié deux fois.