17 Question: Post Build est sorti avec le code 1

question créée à Wed, Oct 16, 2013 12:00 AM

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

 
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 "quitté avec le code 1". Je lui ai fait exécuter la même commande dans une invite DOS, et cela a bien fonctionné. Qu'est-ce qui peut causer cela? Y a-t-il un moyen d’en arriver à la vraie erreur?

Nous utilisons tous deux Visual Studio 2008.

    
102
  1. Dans mon cas, la réponse fournie par Tim Scott vers la fin de cette page (je la néglige donc au début) résout mon problème.
    2016-11-29 06: 18: 02Z
17 réponses                              17                         

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

    
110
2008-11-21 21: 52: 13Z
  1. mettre des guillemets sur les noms de chemins est une bonne pratique. ne pas travailler dans les chemins contenant de l’espace est un événement meilleur: -)
    2008-11-21 21: 54: 22Z
  2. La question des espaces m'a aussi.
    2011-03-15 06: 57: 08Z
  3. copier /y "$(TargetDir) Dotfuscated \" "$(TargetDir)" cette commande ne fonctionne pas pour moi et si je suis en écriture, sortie 0 à la fin fonctionne correctement. pouvez-vous me dire pourquoi?
    2012-10-22 03: 12: 41Z

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

à ceci:

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

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

    
57
2010-02-18 19: 51: 26Z

Le code 1 était dû au fait 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 à un autre et la destination était en lecture seule. Alors je suis juste allé et décoché l'attribut en 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!

    
44
2013-10-25 08: 50: 15Z
  1. m'a sauvé une heure, merci! Du code téléchargé depuis Internet et Windows 7 définit automatiquement le dossier en lecture seule.
    2011-03-31 13: 45: 15Z
  2. J'ai aussi utilisé xcopy à la place et avec le drapeau /y. Toutes les commandes Microsoft. com /ressources /documentation /windows /xp /all /proddocs /…
    2011-03-31 14: 18: 14Z

J'ai ajouté cela aux futurs visiteurs car cette question est assez active.

ROBOCOPY quitte avec des "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.

J'ai donc facilement résolu ce problème en l'ajoutant au bas du fichier de commandes

.  
exit 0

Suggérerqui traitent 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'installera lorsqu'aucun fichier n'est copié = aucune erreur dans VS. Ensuite, quand il y a des modifications, les fichiers sont copiés, les erreurs VS mais tout ce que le développeur voulait était fait.

Conseil supplémentaire: n'utilisez pas de pause dans le script, car celle-ci deviendrait une pause indéfinie dans la construction du système virtuel. tout en développant le script, utilisez quelque chose comme timeout 10. Vous remarquerez ceci et vous en tiendrez compte au lieu d’avoir une version suspendue.

    
41
2017-06-16 23: 36: 19Z
  1. Exactement ce que je cherchais. Merci !!
    2014-04-07 16: 22: 34Z

Obtenez le moniteur de processus de SysInternals . configurez-le pour surveiller le résultat de l'opération Lunaverse.DbVerse (dans le champ Path). Il devrait être évident à partir de là ce qui s'est mal passé

    
11
2008-11-21 20: 50: 34Z

Je devais exécuter VS en tant qu'administrateur pour obtenir ma copie post-build sur un système d'exploitation protégé ".. \Common7 \IDE \PrivateAssemblies" pour fonctionner

    
7
2012-04-30 21: 31: 42Z

Pour ceux qui utilisent la commande Copier dans Événements de construction ( Ligne de commande de l'événement de pré-génération ou /et Publier ligne de commande d'événement -build ) à partir de Projet - > Les propriétés : les paramètres de la commande copie doivent ressembler à ceux-ci: 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).

    
5
2013-12-18 09: 00: 46Z

J'ai pu réparer mon code 1 en exécutant Visual Studio en tant qu'administrateur. Apparemment, il n'avait pas accès à l'exécution des commandes du shell sans administrateur.

    
3
2014-08-19 17: 45: 48Z

J'avais un problème similaire, mais plus particulièrement dans un environnement de génération Jenkins. Pour résoudre ce problème, j’ai abandonné l’utilisation d’une commande de copie dans l’événement post-build en utilisant une cible de copie.

J'ai changé cela:

 
   <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
   </PropertyGroup>

à ceci:

 
  <Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
  </Target>

et cela fonctionne bien maintenant.

L’erreur spécifique que j’obtenais est la suivante:

 
(PostBuildEvent target) -> 
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy <http://1.2.3.4/job/BLAHv2/ws/Api/bin/BLAH.Common.xml> <http://1.2.3.4/job/BLAHv2/ws/Api/App_Data/BLAH.Common.xml"> exited with code 1. [<http://1.2.3.4/job/BLAHv2/ws/Api/Api.csproj]>
    
3
2016-10-31 15: 04: 19Z
  1. Comment avez-vous apporté ce changement? L'avez-vous modifié manuellement? Comment exécutez-vous la cible? Cela ressemble à quelque chose que vous devez spécifier dans la ligne de commande msbuild. J'ai le même problème dans mon environnement Jenkins, ce qui est bizarre, car tous les dossiers créés par msbuild sont toujours en lecture seule. Pourquoi cela se copie bien sur ma machine mais pas sur le serveur ne me dépasse pas.
    2018-03-06 20: 30: 54Z
  2. Je viens d'utiliser Notepad ++ pour éditer le fichier csproj. Le hook "AfterBuild" est un hook standard. S'il existe, il est appelé automatiquement après le processus de construction.
    2018-03-07 11: 59: 47Z
  3. Merci. Je ne savais pas si vous aviez un fichier msbuild personnalisé avec une cible ou si c'était simplement le studio visuel crééile. FYI: Dans mon cas, j'ai compris que le problème avait à voir avec l'ordre de fabrication. J'ai oublié de définir les dépendances de construction dans l'édition, la configuration de la solution, de sorte que les projets reposaient sur le serveur dans un ordre différent, de sorte que le fichier d'entrée n'était pas encore disponible lors de l'exécution de la copie. S'assurer que le fichier .dll a été produit avant l'autre projet qui en avait besoin, corrigé le pour moi C’était un problème très subtil avec la configuration de la solution qui l’a provoquée.
    2018-03-07 22: 12: 20Z
  4. Il n’était pas évident d’être au début de cet ordre de construction pour chaque configuration. Je pensais que c’était davantage un paramètre de solution, mais il est évident que vous devez mettre à jour l’ordre de construction dans TOUTES les configurations.
    2018-03-07 22: 13: 57Z

Par mesure de pratique, je vous suggère de remplacer l'événement post-build par un Tâche de copie de fichier de génération MS .

    
2
2008-11-21 21: 58: 28Z
  1. quels sont les avantages de l'un par rapport à l'autre?
    2013-03-15 14: 32: 24Z

Pour moi, je devais m'assurer que le programme auquel je m'adaptais ne fonctionnait pas à ce moment-là. Il n'y avait pas d'erreur dans la syntaxe. J'espère que ça aide quelqu'un.

    
2
2011-07-18 14: 18: 04Z

Je viens de recevoir la même erreur. J'avais un% dans le chemin de destination à échapper

 
c:\projects\%NotAnEnvironmentVariable%

devait être

 
c:\projects\%%NotAnEnvironmentVariable%%
    
2
2012-12-01 18: 26: 12Z

D'accord, c'est un problème avec de nombreuses solutions, je poste donc le mien pour donner aux gens plus d'indices. Ma situation est de vérifier les dossiers dans votre chemin et assurez-vous qu'ils existent tous sur votre ordinateur. Par exemple: "$(SolutionDir) \partBin \Bin \$(NomProjet) .pdb", mais "Bin" ne se trouve pas dans le dossier partBin.

    
2
2014-08-28 13: 59: 29Z

Pour ceux qui utilisent la commande 'copy' dans les événements de construction (ligne de commande d'événement pré-construction ou /et ligne de commande d'événement post-construction) à partir de Projet - > Propriétés: le dossier cible doit exister

    
2
2016-03-21 14: 51: 01Z

Tant de solutions ...

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

    
0
2014-03-02 09: 26: 31Z

J'avais le 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 d'assembly et l'espace de noms racine en nom de projet. Cela a très bien fonctionné par la suite!

    
0
2015-07-06 15: 43: 11Z

Encore une autre réponse ...

Dans mon cas, j'avais un projet Visual Studio 2017 ciblant à la fois les formats .Net Standard 1.3 et .Net Framework 2.0. Cela a été spécifié dans le fichier .csproj comme suit:

 
<TargetFrameworks>netstandard1.3;net20</TargetFrameworks>

J'ai également eu une ligne de commande d'événement post-build 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 fichier .Net Framework .dll produit par la construction vers un autre emplacement.

Cette erreur échouait lorsque j'ai effectué 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 Reconstruire supprimait tous les fichiers de sortie, puis construisait pour .Net Standard 1.3, puis tentait d’exécuter la ligne de commande d’événement post-build, qui échouait à cause du fichier. être copié n'a pas encore été construit.

La solution consistait donc à modifier l’ordre de construction, c’est-à-dire construire d'abord pour .NET Framework 2.0, puis pour .Net Standard 1.3.

 
<TargetFrameworks>net20;netstandard1.3</TargetFrameworks>

Ceci fonctionne maintenant, avec le problème mineur que la ligne de commande de l'événement post-build est exécutée deux fois, donc le fichier est copié deux fois.

    
0
2018-06-19 04: 11: 50Z
source placée ici