Копирование команды завершено с кодом 4 при сборке - перезапуск Visual Studio решает ее - PullRequest
145 голосов
/ 05 октября 2010

Время от времени, когда я строю свое решение здесь (с 7 проектами в нем), я получаю страшную ошибку «Копия команды завершена с кодом 4», в Visual Studio 2010 Premium ed.

Это из-за невозможности пройти событие после сборки.

Вот что временно решает проблему

  • Иногда: перезапуск Visual Studio, и я могу построить решение
  • Иногда: и перезапуск Visual Studio, и мой файловый менеджер (Q-Dir 4.37) решают его.

Вот как выглядит событие после сборки:

xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y

Когда вы получаете копию команды, завершенную с кодом [insert value], это обычно происходит из-за следующего:

  • разрешения на чтение / запись
  • пропущенных файлов
  • неправильные каталоги

Однако - очевидно, что иногда, когда я строю решение, проблем нет.

К вашему сведению, я удалил ReSharper 5.1.1 две недели назад, и с тех пор Visual Studio выдала мне несколько ошибок (среди которых не было возможности отладки). Я переустанавливал Visual Studio, и с тех пор он работает лучше, но проблема все еще остается. Может ли это быть связано с тем, что где-то есть ReSharper?

Была ли у вас такая же проблема и вы решили ее? Или у вас есть какое-нибудь возможное решение?

Ответы [ 27 ]

193 голосов
/ 31 марта 2011

Хотя /C может игнорировать ошибки, это не может быть реальным решением, так как могут быть файлы, которые ДОЛЖНЫ быть скопированы для успешной сборки.

Самая распространенная проблема - пропущенные кавычкивокруг предварительно определенных тегов команд (таких как $TargetDir).Когда кто-либо создает различные ветви и пути в коде или TFS, существует очень высокая вероятность того, что это произойдет.

Иногда, если файл доступен только для чтения, это также может вызвать проблемы.Добавьте параметр /R, чтобы разрешить копирование файлов только для чтения.Список доступных параметров можно найти по адресу:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true

Другая возможная проблема заключается в невозможности доступа к базовой папке.Если это так, попробуйте выполнить "start xcopy" вместо "xcopy".Откроется другое командное окно, но с правами администратора.

73 голосов
/ 05 октября 2010

Я всегда обнаруживал, что это проблема блокировки файлов.Код 4 - не удается получить доступ к файлу.Одно частичное решение, которое я нашел, - это использовать параметр / C для xcopy (который продолжается при ошибке).Не совсем решение, но в основном это остановило мои сборки от сбоев.

Другое решение, которое работает только на 32 битах, - это использование инструмента unlocker для освобождения дескрипторов окон в файле до того, каккопия.

Редактировать: Я только что понял, что он работает и под 64 бит.

19 голосов
/ 27 февраля 2012

Я пересек ту же ошибку, но это не связано с тем, что файл заблокирован, но файл отсутствует.

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

После того, как я это очистил, проблема решена.

ОБНОВЛЕНИЕ:

Как прокомментировал @rhughes:

Реальная проблема в том, как заставить команду работать здесь, а не удалять ее.

и он абсолютно прав.

enter image description here

9 голосов
/ 31 января 2014

Я также столкнулся с этой проблемой. Дважды проверьте результат в окне ошибки.

В моем случае, \ зависал в xcopy (как я использовал $(TargetDir)).В моем случае $(SolutionDir)..\bin.Если вы используете какой-либо другой вывод, его необходимо настроить.

Также обратите внимание, что start xcopy не исправляет его, если после компиляции ошибка исчезлаВозможно, он только что был подавлен командной строкой, и файл фактически не был скопирован!

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

6 голосов
/ 07 декабря 2011

Если событие после сборки содержит команду copy / xcopy для копирования результатов сборки в какой-либо каталог (что обычно является наиболее распространенной операцией после сборки), проблема может возникнуть в случае, если полный путь к каталогу исходного или целевого адресатов содержит папкуимена, которые включают пробелы.Удалите место для имен каталогов и попробуйте.

5 голосов
/ 07 мая 2012

Как упоминалось на многих сайтах, для этого есть разные причины.Для меня это было связано с длиной источника и назначения (длина пути).Я попробовал xcopy в командной строке, и мне не удалось ввести полный источник и путь (после некоторых символов он не позволяет вам печатать).Затем я сократил длину пути и смог бежать.Надеюсь, это поможет.

3 голосов
/ 21 сентября 2011

Я получил эту ошибку, потому что у учетной записи пользователя, под которой работала служба сборки TFS, не было разрешений на запись в папку назначения. Right-click on the folder-->Properties-->Security.

3 голосов
/ 28 ноября 2012

Это может происходить в нескольких случаях:

  1. Когда полный путь строки превышает 254 символа.
  2. Когда имя копируемого файла является неправильным.*
  3. Если целевой путь указан неверно.
  4. Когда атрибут readonly установлен для скопированного файла или целевой папки.
3 голосов
/ 19 марта 2014

Запустите VS в режиме администратора, и он должен работать нормально.

2 голосов
/ 28 марта 2014

Я столкнулся с той же проблемой в случае XCOPY после завершения сборки.В моем случае проблема возникла из-за разрешений READ-ONLY для папок.

Я добавил команду attrib -R перед XCOPY, и это решило проблему.

Надеюсь, это кому-нибудь поможет!*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...