web-dev-qa-db-fra.com

Qu'est-ce qui ne va pas quand Visual Studio me dit "xcopy est sorti avec le code 4"

Je ne suis pas très familier avec les événements post-build, 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 /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

Le programme apparaît pour fonctionner correctement, malgré cette erreur, mais je ne veux pas simplement ignorer ce problème et espérer que rien de grave ne se produira. Étrangement, cette ligne a commencé comme une seule commande (la première xcopy), mais comme je continuais à compiler le projet (en corrigeant d’autres problèmes, principalement des références), le message d’erreur s’élargissait. 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
106
Raven Dreamer

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 non valide 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-build 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 entourés de guillemets doubles. Par exemple:

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

Basculez l'onglet de surveillance sur "sortie" et recherchez la commande xcopy. Parfois, vous trouvez ici un message supplémentaire (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 View-Output pour l'afficher.

30
Felice Pollano

En plus de la réponse acceptée, l'erreur peut également se produire lorsque le dossier de destination est en lecture seule (Commun en cas d'utilisation de TFS).

27
Pieter

Si le fichier source n'est pas trouvé xcopy renvoie le code d'erreur 4 aussi.

16
Der_Meister

J'ai reçu l'erreur 'quitté avec le 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. / R indique que lecture seule les fichiers doivent être écrasés

ancienne commande:

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

nouvelle commande

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

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

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

J'ai remplacé xcopy par robocopy pour l'événement post-build affecté; Robocopy semble traiter des chemins légèrement différents et a été en mesure de terminer la tâche de copie que xcopy n'a pas pu gérer.

8
CodeFox

Ça veut dire :

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, fondamentalement, cela pourrait être à peu près tout haha ​​... essayez d'exécuter la commande une à une à partir de l'invite de commandes pour déterminer quelle partie de la commande vous pose problème.

5
BrandonZeider

Je l'ai eu avec le message

Spécification de lecteur non valide

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

xcopy . \\localhost

xcopy . \\localhost\share

était attendu

3
Thomas Weller

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

En VS, faites un clic droit sur le projet où vous avez des événements post-build. Allez à Construire des dépendances> Dépendances du projet et assurez-vous que c'est correct. Vérifiez également l'ordre de construction du projet (onglet suivant relatif aux dépendances).

1
sree

J'ai eu le même problème. Vous pouvez également vérifier le sens de la barre oblique. Pour moi, cela fonctionnait d'utiliser une barre oblique inversée au lieu d'une barre oblique. Exemple

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

Au lieu de:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"
0
Marc Dirven

J'avais une commande post-build qui fonctionnait parfaitement avant de faire une mise à jour de VS 2017 . assemblées.

Cela a changé de cela ....

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Pour ça...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Changement très subtil mais radical, vérifiez donc vos chemins après une mise à jour si vous voyez cette erreur. 

0
Fütemire

J'ai rencontré ce problème. J'ai donc lancé la commande xcopy à partir de la ligne de commande et elle a déclaré:

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é.

0
NielW