Quelques projets de la solution de mon client ont un événement post-build: xcopy
la sortie de build dans un dossier spécifique. Cela fonctionne bien lors de la construction localement. Cependant, TeamCity, je parfois obtenir
xcopy [...] sorti avec le code 2
Si j'utilise regular copy
, il sort avec le code 1. Je pense que cela a quelque chose à voir avec les verrous de fichiers, bien que les fichiers spécifiques copiés ne soient pas les mêmes, donc peut-être juste un verrouillage sur le répertoire de destination partagé. J'utilise /y
pour ne pas demander d'écrasement des fichiers.
Pourquoi cela échoue dans TeamCity mais pas localement?
The user pressed CTRL+C to terminate xcopy
. Hehe.Réponses:
Même si vous fournissez le
/Y
commutateur avec xcopy, vous obtiendrez toujours une erreur lorsque xcopy ne sait pas si l'élément que vous copiez est un fichier ou un répertoire. Cette erreur apparaîtra comme "sortie avec le code 2". Lorsque vous exécutez le même xcopy à une invite de commande, vous verrez que xcopy demande une réponse de fichier ou de répertoire.Pour résoudre ce problème avec une génération automatisée, vous pouvez faire écho dans une réponse prédéfinie avec un canal.
Pour dire que ce que vous copiez est un fichier, faites un écho dans
F
:Pour dire que la chose que vous copiez est un répertoire, faites écho dans
D
:Parfois, ce qui précède peut être résolu en utilisant simplement une commande de copie au lieu de xcopy:
Cependant, s'il y a des répertoires inexistants menant à la destination finale du fichier, alors un "sorti avec le code 1" se produira.
N'oubliez pas: utilisez le
/C
commutateur et xcopy avec prudence.la source
*
fonctionnera-t-il également avec les répertoires? Ou est-ce juste pour les fichiers?J'ai corrigé le code d'erreur 2 en ajoutant un \ à la fin de mon chemin, sans lui, xcopy pensera qu'il s'agit d'un fichier au lieu d'un dossier.
la source
Si vous utilisez xcopy dans un événement post build, utilisez le commutateur / Y en plus de / C.
la source
/Y
supprime l'invite! Pourquoi était-ce si difficile à trouver?Ma solution à ce problème était d'aller dans le dossier bin cible et de m'assurer que le sous-dossier approprié existe. Une fois ce sous-dossier créé manuellement, le processus de génération s'est terminé avec succès.
la source
copy
réparé pour moi.xcopy with /c /y
n'a pas marché. J'avais une sortie 4, alors je suis allé avecxcopy
, mais il s'est avéré que j'avais besoin de devis($TargetPath)
.Mon scénario:
la source
Vous utilisez probablement TeamCity avec git. Si oui, vérifiez que les dossiers que vous souhaitez copier existent dans le référentiel git. Habituellement, git évite d'ajouter des dossiers de projet vides au référentiel, il
xcopy
ne parvient donc pas à le trouver et génère une erreur.Vous pouvez ajouter un fichier texte vide dans un dossier vide, valider et voir le dossier apparaît dans le référentiel.
la source