Qu’est-ce qui ne va pas quand Visual Studio me dit que «xcopy est sorti avec le code 4»

Je ne suis pas très familier avec les événements post-construction, donc je suis un peu confus quant à ce qui ne va pas avec mon programme. Lors de la compilation dans visual studio 2010, j’obtiens les éléments suivants:

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D rmdir /S /QC:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4. 

Le programme semble fonctionner correctement malgré cette erreur, mais je ne veux pas simplement ignorer ce problème et espérer que rien ne se passe. Etrangement, cette ligne a commencé comme une seule commande (la première xcopy) mais comme je continuais à comstackr le projet (en corrigeant d’autres problèmes, principalement des références), le message d’erreur était de plus en plus gros. Une idée de ce qui pourrait se passer?

Edit: Voici les événements postbuild qui semblent échouer –

 xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D rmdir /S /Q $(TargetDir).gwt-tmp 

Le code de sortie Xcopy 4 signifie “Une erreur d’initialisation s’est produite. La mémoire ou l’espace disque est insuffisant ou vous avez entré un nom de lecteur ou une syntaxe non valide sur la ligne de commande.

Il semble que Visual Studio fournisse des arguments non valides à xcopy. Vérifiez votre commande d’événement post-construction via Project Properties > Right Click > Build Events > Post Build Event .

Notez que si les termes de macro $(ProjectDir) ou similaires ont des espaces dans les chemins résultants lorsqu’ils sont développés, ils devront alors être mis entre guillemets. Par exemple:

 xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1 

Basculez l’onglet Watch sur “ouput” et recherchez la commande xcopy. Parfois, vous trouvez un autre message (la sortie réelle de xcopy) qui pourrait vous aider à résoudre le problème. Si vous ne voyez pas l’onglet de sortie, utilisez le menu Affichage-Sortie pour l’afficher.

En plus de la réponse acceptée, l’erreur peut également se produire lorsque le dossier de destination est en lecture seule (commun lors de l’utilisation de TFS)

Si le fichier source n’est pas trouvé, xcopy renvoie également le code d’erreur 4 .

J’ai reçu l’erreur ‘ exited with code 4 ‘ lorsque la commande xcopy a tenté d’écraser un fichier en lecture seule. J’ai réussi à résoudre ce problème en ajoutant / R à la commande xcopy. Le / R indique que les fichiers en lecture seule doivent être écrasés

vieille commande:

 XCOPY /E /Y "$(ProjectDir)source file" "destination" 

nouvelle commande

 XCOPY /E /Y /R "$(ProjectDir)source file" "destination" 

Comme d’autres réponses l’expliquent, le code de sortie 4 peut avoir plusieurs causes.

J’ai remarqué un cas où les noms de chemins résultants dépassaient la longueur maximale autorisée (comme ici ).

J’ai remplacé xcopy par robocopy pour l’événement post-construction concerné; robocopy semble gérer des chemins légèrement différents et a pu terminer la tâche de copie que xcopy était incapable de gérer.

Cela signifie :

Une erreur d’initialisation s’est produite. Il n’y a pas assez de mémoire ou d’espace disque ou vous avez entré un nom de lecteur non valide ou une syntaxe non valide sur la ligne de commande.

Donc, en gros, ça pourrait être n’importe quoi … essayez d’exécuter la commande une à la fois à partir de l’invite de commande pour savoir quelle partie de la commande vous pose problème.

Je l’ai eu avec le message

Spécification de lecteur invalide

lors de la copie sur un partage réseau sans spécifier le nom du lecteur, par exemple

 xcopy . \\localhost 

 xcopy . \\localhost\share 

était attendu

Dans mon cas, le problème était dû à un ordre de construction incorrect. Un projet avait une commande xcopy sur les événements post-construction pour copier les fichiers du dossier bin vers un autre dossier. Mais à cause de dépendances incorrectes, de nouveaux fichiers étaient créés dans le dossier bin alors que xcopy était en cours.

Dans VS clic droit sur le projet où vous avez des événements post-construction. Allez dans Build Dependencies> Project Dependencies et assurez-vous que c’est correct. Vérifiez également l’ordre de construction du projet (onglet suivant pour les dépendances).

J’ai couru à travers ce problème, alors j’ai exécuté la commande xcopy à partir de la ligne de commande et elle disait:

 File creation error - The requested operation cannot be performed on a file with a user-mapped section open. 

C’était en fait Visual Studio qui tenait quelque chose. Je viens de redémarrer Visual Studio et cela a fonctionné.