Почему шаг после сборки (xcopy) иногда завершается с кодом 2 в сборке TeamCity?


несколько проектов в решении моего клиента имеют событие после сборки:xcopy вывод сборки в определенную папку. Это прекрасно работает при локальном строительстве. Однако, в TeamCity, я иногда get

xcopy [...] завершился с кодом 2

Если я использую обычный copy, он выходит с кодом 1. Я ожидаю, что это имеет какое-то отношение к блокировкам файлов, хотя конкретные файлы копируются не то же самое, поэтому, возможно, просто блокировка общий каталог назначения. Я использую /y не запрашивать подтверждение на перезапись файлов.

почему это не удается в TeamCity, но не локально?

6 80

6 ответов:

даже если вы укажите /Y переключитесь с помощью xcopy, вы все равно получите сообщение об ошибке, когда xcopy не знает, является ли копируемая вещь файлом или каталогом. Эта ошибка будет отображаться как"выход с кодом 2". При запуске того же xcopy в командной строке, вы увидите, что xcopy запрашивает ответ файла или каталога.

чтобы решить эту проблему с помощью автоматической сборки, вы можете эхо в заранее определенном ответе с помощью канала.

сказать, что вы копируете есть файл, эхо в F:

echo F|xcopy /y ...

чтобы сказать, что вы копируете это directoy, эхо в D:

echo D|xcopy /y ...

иногда вышеизложенное можно решить, просто используя команду копирования вместо xcopy:

copy /y ...

однако, если есть несуществующие каталоги, ведущие к конечному месту назначения файла, то произойдет "выход с кодом 1".

помните: используйте /C переключатель и xcopy с осторожностью.

я исправил код ошибки 2, добавив \ в конце моего пути, без него xcopy будет думать, что это файл, а не папка.

Если вы используете xcopy в событии post build, используйте переключатель /Y в дополнение к /C.

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.

мое исправление для этой проблемы состояло в том, чтобы перейти в целевую папку bin и убедиться, что там существует соответствующая подпапка. После того, как эта подпапка была создана вручную, процесс сборки завершился успешно.

copy фиксированная это для меня. xcopy with /c /y не работает. Я получал выход 4, поэтому я пошел с xcopy, но оказалось, что мне нужны кавычки вокруг ($TargetPath).

мой скрипт:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug$(TargetFileName)"

Вероятно, вы используете TeamCity с git. Если да, то проверьте это папки вы хотите скопировать существуют в репозитории git. Обычно в Git, как избежать добавления пустых папок проекта в репозиторий, так xcopy не удается найти его и генерирует ошибку.

вы можете добавить пустой текстовый файл в пустую папку, зафиксировать и посмотреть, как папка появляется в репозитории.