Время от времени, когда я строю свое решение здесь (с 7 проектами в нем), я получаю страшную ошибку «Копия команды завершена с кодом 4», в Visual Studio 2010 Premium ed.
Это происходит из-за невозможности пройти событие после сборки.
Вот что временно решает проблему
- Иногда: перезапуск Visual Studio, и я могу построить решение
- Иногда: и перезапуск Visual Studio, и мой файловый менеджер (Q-Dir 4.37) решают эту проблему.
Вот как выглядит событие после сборки:
xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y
Когда вы получаете завершение команды copy с ошибкой code [insert value], обычно это происходит из-за следующего:
- разрешения на чтение / запись
- недостающие файлы
- неправильные каталоги
Однако, очевидно, иногда, когда я строю решение, проблем нет.
К вашему сведению, я удалил ReSharper 5.1.1 две недели назад, и Visual Studio с тех пор дает мне некоторые ошибки (среди которых не было возможности отладки). Я переустанавливал Visual Studio, и с тех пор он работает лучше, но проблема все еще остается. Может ли это быть связано с тем, что где-то есть ReSharper?
У вас была такая же проблема и вы решили ее? Или у вас есть какое-нибудь возможное решение?
источник
Хотя
/C
может игнорировать ошибки, это не может быть реальным решением, так как могут быть файлы, которые ДОЛЖНЫ быть скопированы для успешной сборки.Наиболее распространенной проблемой являются пропущенные кавычки вокруг предопределенных тегов команд (например,
$TargetDir
). Когда кто-то создает различные ветви и пути в коде или TFS, существует очень высокая вероятность того, что это произойдет.Иногда, если файл доступен только для чтения, это также вызывает проблемы. Добавьте
/R
параметр, позволяющий копировать файлы только для чтения. Вы можете найти список доступных вариантов на:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true
Другая возможная проблема заключается в том, что к базовой папке нет доступа. Если это так, попробуйте выполнить
"start xcopy"
вместо"xcopy"
. Откроется другое командное окно, но с правами администратора.источник
start
и/R
, на всякий случай ... не уверен, какой из них сделал трюк, но это сработало! Спасибо!Я пересек ту же ошибку, но это не связано с тем, что файл заблокирован, но файл отсутствует.
Причина, по которой VS пытается скопировать несуществующий файл, заключается в команде события Post-build.
После того, как я это очистил, проблема решена.
ОБНОВИТЬ:
Как заметил @rhughes:
и он абсолютно прав.
источник
Я также столкнулся с этой проблемой. Дважды проверьте результат в окне ошибки.
В моем случае, вылезла из-под
\
хвоста xcopy (как я и использовал$(TargetDir)
). В моем случае$(SolutionDir)..\bin
. Если вы используете какой-либо другой выход, это нужно отрегулировать.Также обратите внимание, что
start xcopy
это не исправит, если ошибка исчезла после компиляции. Это могло быть только что подавлено командной строкой, и на самом деле ни один файл не был скопирован!Кстати, вы можете вручную выполнить ваши команды xcopy в командной оболочке. Вы получите более подробную информацию при их выполнении, указывая вам в правильном направлении.
источник
Если событие после сборки содержит команду copy / xcopy для копирования вывода сборки в какой-либо каталог (что обычно является наиболее распространенной операцией после сборки), проблема может возникнуть в том случае, если полный путь к каталогу исходного или целевого назначения содержит имена папок, которые включают пространства. Удалите место для имен каталогов и попробуйте.
источник
Как упоминалось на многих сайтах, для этого есть разные причины. Для меня это было связано с длиной источника и назначения (длина пути). Я попытался xcopy в командной строке, и я не смог ввести полный источник и путь (после некоторых символов он не позволит вам набрать). Затем я уменьшил длину пути и смог бежать. Надеюсь это поможет.
источник
Запустите VS в режиме администратора, и он должен работать нормально.
источник
Я получил эту ошибку, потому что у учетной записи пользователя, под которой работала служба сборки TFS, не было разрешений на запись в папку назначения.
Right-click on the folder-->Properties-->Security
,источник
Это может произойти в нескольких случаях:
источник
Я получил эту ошибку, потому что файл был открыт в другом экземпляре.
Когда я закрыл файл и заново собрал решение, оно было успешно скопировано.
источник
Я столкнулся с той же проблемой в случае XCOPY после завершения сборки. В моем случае проблема возникла из-за разрешений READ-ONLY для папок.
Я добавил команду attrib -R перед XCOPY, и это решило проблему.
Надеюсь, это поможет кому-то!
источник
У меня была такая же ошибка с xcopy в связи с Test Engine. Я использую VisualStudio Professional 2013. По умолчанию Test -> Test Settings -> Keep Test Execution Engine, кажется, является причиной моего кода ошибки 4 с xcopy. Выключение решило проблему. Кажется, что механизм исполнения держит некоторые DLL-файлы.
источник
У меня такая же проблема. Простое «Чистое решение» в VS устранило ошибку, но это было временное решение.
источник
Я обнаружил, что установка параметра «Копировать в выходной каталог» в файле «Всегда копировать», похоже, устраняет проблему блокировки. Хотя сейчас у меня есть 2 копии файлов, и мне нужно удалить одну.
источник
У меня такая же проблема. Однако у меня ничего не получалось. Я решил проблему, добавив
в мой код. Проблема заключалась в том, что во время копирования файлов иногда не удавалось найти последний файл, и «летучая мышь» возвращала ненулевое значение.
Надеюсь, это поможет кому-то!
источник
Если вы используете Windows 7 и более поздние версии, вы можете попробовать новую команду «robocopy»:
Более подробную информацию о робокопии можно найти здесь .
источник
Я столкнулся с той же проблемой. Я удалил события после сборки, и он начал работать. Иногда, когда мы добавляем некоторые компоненты SQL, могут также добавляться команды после сборки.
источник
Я получаю нечто подобное, используя xcopy с параметром / exclude. В моем случае я обнаружил, что редактирование события после сборки (что-то безобидное, например перевод строки после команды) и сохранение проекта приводят к возникновению ошибки. Повторное сохранение файла, указанного в параметре / exclude, заставляет его снова работать.
источник
Когда я писал библиотеку DLL, я использовал команду xcopy, чтобы скопировать библиотеку, в которой программа может найти и загрузить ее. После нескольких раз открытия и закрытия программы в диспетчере задач все еще оставался открытый процесс, который я не распознал.
Найдите любой процесс, из которого можно использовать файл, и закройте его.
источник
Что исправило это для меня : найдите конкретное решение для проекта, который вы хотите, т.е. НЕ общий файл решения для всех проектов.
Попробуй - я попробовал все остальное, упомянутое здесь, но безрезультатно.
источник
Я не вижу здесь ничего, чтобы предположить, что это веб-приложение, но я сам столкнулся с этой проблемой - у меня есть две команды xcopy для события после сборки, и только одна из них завершилась неудачно. Что-то блокировало файл, и это была не Visual Studio (как я пытался перезапустить).
Единственная другая вещь, которая использовала бы dll, который я построил, была IIS. И о чудо,
Простой
iisreset
сделал свое дело для меня.источник
Я была такая же проблема. Это было вызвано наличием одного и того же флага дважды, например:
if $ (ConfigurationName) == Release (xcopy "$ (TargetDir) . " "$ (SolutionDir) Deployment \ $ (ProjectName) \" / e / d / i / y / e)
Обратите внимание, что флаг "/ e" появляется дважды. Удаление дубликата решило проблему.
источник
В моем случае мой
$(OutDir)
был просто..\..\Build\
некий относительный путь. И, когда я пытался скопироватьxcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"
код следующим образом, я получал ошибку кода выхода 4.Происходило то, что эта команда выполнялась в самом $ (OutDir) (в моем случае папка сборки), а не в каталоге, где был расположен файл csproj проекта (как мы обычно ожидаем). Следовательно, я продолжал получать
File not found
ошибку (соответствует коду выхода 4).Я не мог понять это, пока не написал
cd
в событиях Post Build, чтобы напечатать, в каком каталоге он выполнялся.Итак, подведем итог: если мы хотим
copy
/xcopy
файлы из$(OutDir)
, либо использовать"$(TargetDir)"
(это полный путь для выходного каталога), либо вообще не нужно указывать какой-либо путь.источник
Может быть вызвано рабочей станцией VMWare с общими папками
У меня проблема всегда, когда папка destinatinon
xcopy
также отображается как Общая папка на виртуальной машине.Я решил это с помощью скрипта, запущенного в vm и удаляющего содержимое общей папки.
источник
Чтобы расширить на грубый ответ,
Робокопия работает прекрасно, только в том случае, если вам нужно включить подкаталоги, которые вы можете использовать
/e
для включения подпапок и копирования пустых каталогов или/s
включения подпапок, исключая пустые каталоги.Кроме того, robocopy сообщит о нескольких вещах, например, если были скопированы новые файлы, это заставит VS пожаловаться, так как все, что выше 0, является ошибкой, и robocopy вернет 1, если были найдены новые файлы. Стоит отметить, что robocopy сначала сравнивает Source / Dest и только копирует обновленные / новые файлы.
Чтобы обойти это использование:
источник
Если вы находитесь здесь, потому что ваш проект не может быть собран на сервере сборки, но он прекрасно собирается "вручную" на компьютере разработчика, и вы делаете
xcopy
только для отладки и эмуляции производственной среды на компьютере разработчика, то вы можете посмотреть в этом решении:https://stackoverflow.com/a/1732478/2279059
Вы просто отключаете события после сборки на сервере сборки, используя
Этого недостаточно, если у вас есть другие события после сборки, которые также должны запускаться на сервере сборки, и это не общее решение. Однако, поскольку существует много разных причин этой проблемы, не может быть общего решения. Один из многих ответов на этот вопрос (и его дубликаты), вероятно, поможет, но будьте осторожны с подходами, которые только каким-то образом обходят обработку ошибок (например,
xcopy /C
). Они могут работать для вас, особенно в сценарии сборки сервера, но я думаю, что этот вариант более надежен, ЕСЛИ его можно использовать.Также было высказано предположение, что с более новыми версиями Visual Studio проблема больше не существует, поэтому, если вы используете старую версию, рассмотрите возможность обновления инструментов сборки.
источник
Код ошибки 4 может означать много вещей, поэтому я рекомендую прочитать и другие ответы, пока не найдете решение, которое работает для вас, и не поймете, ПОЧЕМУ оно работает (некоторые решения отключают только обработку ошибок, которая может только маскировать проблему, но не реши).
Это может быть проблема блокировки файлов, связанная с параллельным построением. Обходной путь - не использовать параллельное построение. Это поведение по умолчанию, но если вы используете эту
-m
опцию, проекты будут создаваться параллельно. Следующие варианты не должны строить проекты параллельно, поэтому вы не столкнетесь с проблемой блокировки файлов.Обратите внимание, что вопреки сказанному здесь, это даже происходит с «последней» версией MSBuild (из Build Tools for Visual Studio 2019).
Лучшее решение, вероятно, - убедиться, что вам не нужно копировать файлы на этапе после сборки. В некоторых ситуациях вы также можете отключить шаги после сборки при сборке с MSBuild на сервере сборки: https://stackoverflow.com/a/55899347/2279059
источник