Почему пост-сборка (xcopy) иногда выходит из кода 2 в сборке команды?
Вопрос
Несколько проектов в решении моего клиента проводят мероприятие после сборки: xcopy
Вывод сборки в определенную папку. Это прекрасно работает при строительстве на местном уровне. Однако в команде я время от времени получить
xcopy [...] выходит с кодом 2
Если я использую обычные copy
, он выходит из кода 1. Я ожидаю, что это как -то связано с блокировками файлов, хотя копируемые конкретные файлы не одинаковы, поэтому, возможно, просто блокировать в каталоге общего назначения. я использую /y
Чтобы не призвать перезаписать файлы.
Почему это терпит неудачу в команде, но не на местном уровне?
Решение
Даже если вы предоставите /Y
Переключитесь с XCopy, вы все равно получите ошибку, когда XCopy не знает, является ли вы копируете, что вы копируете или каталог. Эта ошибка будет отображаться как «Выйти с кодом 2». Когда вы запускаете одну и ту же XCopy в командной строке, вы увидите, что XCopy запрашивает ответ файла или каталога.
Чтобы решить эту проблему с помощью автоматизированной сборки, вы можете повторить предварительно определенный ответ с помощью трубы.
Сказать, что вы копируете, - это файл, эхо в F
:
echo F|xcopy /y ...
Сказать, что вы копируете, - это каталог, эхо в 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.
Мое решение для этой проблемы состояла в том, чтобы перейти в папку Target Bin и убедиться, что там существует надлежащая подпалка. Как только эта подпалка была создана вручную, процесс сборки успешно завершился.
copy
исправил это для меня. xcopy with /c /y
не сработало. Я получал выход 4, поэтому я пошел с xcopy
, но оказалось, что мне нужны цитаты вокруг ($TargetPath)
.
Мой сценарий:
if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"
Наверное, вы используете команду с git. Если да, проверьте это папки Вы хотите скопировать, существуют в репозитории GIT. Обычно git aviod добавляет пустые папки проекта в репозиторий, поэтому xcopy
не может найти его и генерирует ошибку.
Вы можете добавить немного пустого текстового файла в пустую папку, фиксировать и увидеть папку в репозитории.