web-dev-qa-db-fra.com

VS 2012: erreur xcopy post-génération 2

je veux que VS copie le fichier .lib qu'il a créé après le processus de construction dans un dossier spécifique. Je suis donc allé à la configuration du projet, à l'événement post-build, et j'ai entré la commande suivante:

if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

Mais au lieu de copier, le processus échoue après avoir cliqué sur "build" et j'ai reçu l'erreur suivante:

erreur MSB3073: La commande "s'il existe C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy" C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib "" C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib "/ Y

: VCEnd "est sorti avec le code 2.

Je me pose également des questions sur le :VCEnd dans la chaîne de commande du message d'erreur <- C'est peut-être la raison? Comment résoudre ce problème?

Toute aide et astuces seraient heureusement consommées:) ...

solution partielle:

MODIFIER : il ressemble à la partie renommer (Inc.lib à z.lib) pose problème, lorsque xcopy demande s'il s'agit d'un fichier ou d'un répertoire ... cela fonctionne quand je copie simplement le fichier initialement nommé dans un répertoire au lieu de copier renommé

18
Incubbus

documentation Xcopy dit ce qui suit:

Spécification si la destination est un fichier ou un répertoire Si la destination ne contient pas de répertoire existant et ne se termine pas par une barre oblique inverse (\), le message suivant apparaît:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

Appuyez sur F si vous souhaitez que le ou les fichiers soient copiés dans un fichier. Appuyez sur D si vous souhaitez que le ou les fichiers soient copiés dans un répertoire.

Vous pouvez supprimer ce message en utilisant l'option de ligne de commande/i, ce qui fait que xcopy suppose que la destination est un répertoire si la source est plusieurs fichiers ou répertoires.

Vous avez besoin du contraire, mais il n'y a pas un tel commutateur.

La solution est proposée ici: https://stackoverflow.com/a/4283533/532647 .

Il est suggéré d'ajouter la commande xcopy à echo f | préfixe, qui fait essentiellement ce qui suit: il simule un utilisateur appuyant sur la touche f lorsque xcopy le demande.

Votre commande devrait donc ressembler à:

if exist $(TargetPath)
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

Opérateur | dirige simplement la sortie de echo f (== f) dans la commande xcopy et il est lu le cas échéant. Plus d'informations sur la redirection de sortie ici: http://ss64.com/nt/syntax-redirection.html .

MISE À JOUR: Comme Govert souligne , ce hack ne fonctionnera pas sous une version localisée de Windows. Cependant, un autre hack fonctionnera:

xcopy D:\file.Zip c:\renamedFile.Zip*

Ajout du nom du fichier de destination avec un astérisque * fait en sorte que xcopy ne demande pas si la destination est un fichier ou un répertoire.

34
Iarek Kovtunenko

Pourquoi n'utilisez-vous pas la copie au lieu de xcopy? la copie est spécifiquement destinée aux fichiers, il n'y aura donc aucune confusion.

9
user3285954

Avez-vous essayé de mettre le $ (TargetPath) entre guillemets? Les produits spatiaux toujours aussi populaires au lieu de soulignements dans tous les produits MS ont tendance à gâcher les choses à chaque coin ... Je ne sais pas pourquoi ces idiots continuent de le faire ...

Comme ceci: s'il existe "$ (TargetPath)"

1
Csimbi