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

StackOverflow https://stackoverflow.com/questions/7835304

  •  27-10-2019
  •  | 
  •  

Вопрос

Несколько проектов в решении моего клиента проводят мероприятие после сборки: 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 не может найти его и генерирует ошибку.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top