Подтвердить что ты не робот

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

Несколько проектов в моем клиентском решении имеют событие post-build: xcopy вывод сборки в определенную папку. Это прекрасно работает при создании локально. Однако в TeamCity я иногда получаю

xcopy [...] вышел с кодом 2

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

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

4b9b3361

Ответ 1

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

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

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

echo F|xcopy /y ...

Говорить то, что вы копируете, является directoy, echo в D:

echo D|xcopy /y ...

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

copy /y ...

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Надеюсь, это поможет.