Visual Studio "не удалось скопировать" ... во время сборки

Я продолжаю получать эту ошибку во время сборки моего проекта VS2012 C#

Error   41  Could not copy "objDebugWeinGartner.WeinCad.exe" to
 "binDebugWeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "objDebugWeinGartner.WeinCad.exe" to
"binDebugWeinGartner.WeinCad.exe". The process cannot access the file
'binDebugWeinGartner.WeinCad.exe' because it is being used by another 
process.    

теперь я понял, что убийство процесса

Weingartner.WeinCad.vhost.exe

работает (иногда ), но это действует мне на нервы. Есть способ остановить это?

Мои настройки отладчика

enter image description hereenter image description here

30 ответов


я столкнулся с аналогичными сообщениями об ошибках в Visual Studio 2013.

в основном, я обнаружил, что эта ситуация произошла, когда процесс отладки был остановлен из-за исключения.

когда clean + build не решил эту проблему для меня, я добился успеха, выполнив следующее:

  • Закрытие Visual Studio
  • удалить bin и obj папки, и
  • Повторное Открытие Visual Студия.

эта "ошибка" существует с Visual Studio 2003.

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


в Visual Studio Premium 2013 (обновление 3) я решил это с помощью предварительной сборки One-liner:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

это изящно удаляет любые старые файлы PDB (если это возможно), а затем переименовывает все, что осталось с MyProject.old.pdb

затем запускается сеанс сборки / отладки 2 и и MyProject.pdb и MyProject.old.pdb все еще заблокированы:
MyProject.old.pdb -->MyProject.old.old.pdb
MyProject.pdb -->MyProject.old.pdb

наконец, перезапуск Visual Studio и выполнение новой сборки избавятся от обоих из них и продолжат процесс как обычно.


Это потому, что вы закрыли приложение, но оно продолжает работать в фоновом режиме.

временное решение:

  • перейдите в Диспетчер задач (Ctrl + Alt + Esc).
  • перейдите на вкладку Процессы и найдите "YourProjectName.исполняемый."
  • галочку "Отображать процессы всех пользователей", если вы не можете найти свой процесс.
  • завершить процесс.

постоянное решение: вы должны закрыть ваше приложение через кодирование. Вот код...

System.Windows.Forms.Application.Exit();

вы должны поставить этот код в событие закрытия формы в форму. Пример:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

the .виртуальный хост.exe-это процесс отладчика, поэтому кажется, что отлаживаемый процесс не закрыт должным образом. Скорее всего, у вас есть ошибка, которая поддерживает его в живых и не останавливает процесс отладки правильно - есть опции для отсоединения от процесса, когда вы нажимаете "остановить отладку" вместо фактического убийства отладчика, поэтому, возможно, у вас есть этот набор.

но это проблема-файл, который вы пытаетесь скопировать, заблокирован (т. е. все еще используется) ОС, поэтому его предотвращение копирования. Убедитесь, что файл свободен, и вы сможете скопировать его.


Я решил это, убив IISExpress в диспетчере задач


вы должны отключить антивирус (особенно, если это Avast) и повторите попытку. Это помогло мне. Проблема в том, что отладчик/построитель создает.exe-файл, который идентифицируется как угроза Avast и поэтому удаляется прямо перед его выполнением VS.


я смог исправить эту проблему (VS 2010), поставив следующее действие предварительной сборки;

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

цитата:

обходной путь должен поместить это в свойство командной строки события Pre-build > project (на вкладке События сборки):

Код

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

убийство процесса w3wp.exe (IIS) часто решает эту проблему.
Как правило, вы можете узнать процесс, который имеет блокировку файла, перейдя в папку bin и пытаясь удалить его. Сообщение об ошибке, которое появится, если другой процесс использует его, будет содержать имя процесса, который должен быть убит.


исключение

в некоторых случаях в Visual Studio, когда вы (Build || Rebuild) поверх под управлением IISExpress вы столкнулись с этим исключением:

не удается скопировать файл " obj\Debug\YourProjectName.dll " в bin\YourProjectName.файл DLL." the процесс не может получить доступ к файл 'bin\YourProjectName.библиотеки DLL' потому что он используется другим процесс

решение

  1. щелкните правой кнопкой мыши на веб-проекте, который нужно построить.
  2. нажмите на "свойства".
  3. выберите вкладку события сборки с левой стороны.
  4. в командной строке событий предварительной сборки вставьте эти 2 строки:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

вы хорошо 2 идти!


Я столкнулся с той же проблемой на VS 2012 версии 11.0.60610.01 обновление 3 на Windows 8

не было открытых окон конструктора, и проект был простым консольным приложением.

удаление процесса vshost доступа к файлу не работает большую часть времени, так как процесс не обращается к файлу.

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

Это раздражает и пустая трата времени, но это наименее дорогой из всех других вариантов, которые я знаю.

надеюсь, что это помогает...


Я думаю, что я решил его удалить галочку в Break all processes when one process breaks в параметрах отладки (первый скриншот op->второй вариант).
Он строился/работал хорошо некоторое время, так как я снял его.
Я использую MySql NET Connector и элементы управления DevExpress в своем проекте. Может быть, один из них не располагал связями, привязками и т. д. ну из-за этого флага beeing активирован.

отредактировано: определенно это работает! Больше нет "невозможно скопировать файл" и нет конструктора форм ошибки.


Кажется, что путем изменения имени сборки проекта устраняется проблема.

Так вместо этого

enter image description here

Я меняю его на этот

enter image description here

обратите внимание, что я только что изменил его с Increment and Recall до Increment_Recall, Я просто убрал пробелы. теперь он работает нормально для меня.


добавить в событие предварительной сборки вашего мастер-проекта taskkill /f /fi "pid gt 0" / im "YourProcess.vshost.EXE-файл"


мой вклад 10 центов.

У меня все еще есть эта проблема иногда на VS 2015 Update 2.

Я обнаружил, что переключение цели компиляции решает проблему.

попробуйте это: если вы находитесь в отладочном коммутаторе для выпуска и сборки, затем вернитесь к отладке. Проблема исчезла.

Стефано Доменикали:


Я не могу дать решение, чтобы предотвратить это, но вы можете по крайней мере переименовать заблокированный файл (проводник windows или классическое командное окно), а затем скомпилировать/построить. Нет необходимости перезагружать или перезапускать VS201x. С некоторым опытом вы можете добавить сценарий предварительной сборки для удаления старых файлов или переименования, а затем в случае блокировки.


посмотреть этот и другие ответы. В принципе, у вас может быть MSBuild.exe процессов, запущенных в фоновом режиме, потребляя ресурсы. Если у вас есть какие-либо задачи до или после сборки, которые вызывают запуск MSBuild через командную строку, попробуйте добавить флаг "/nr:false" к этой команде. Но опять же, см. предыдущий ответ для более конкретных деталей.


@Geoff (https://stackoverflow.com/a/25251766/3739540) ответ хорош, но он выдает код ошибки 1 при перекомпиляции.

вот что сработало для меня (2>nul 1>nul в конце + выход 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0

Если вы отладка шаблонов T4, а затем это происходит все время. Мое решение (до того, как MS исправит это) будет просто убить этот процесс:

Диспетчер Задач --> Пользователь --> T4VSHostProcess.exe

этот процесс возникает только при отладке шаблона T4, а не при его запуске.


  1. открыть свойства проекта [ меню > проект > свойства ]
  2. выбрать вкладку "отладка"
  3. снимите флажок "Включить процесс размещения visual studio"
  4. начать отладку [F5]
  5. вы получите предупреждение безопасности, просто "ok". Позволяет запустить приложение
  6. остановить отладку.
  7. установите флажок "Включить процесс размещения visual studio" на вкладке отладка,
  8. теперь попробуйте начать отладку, вы не увидите ошибку опять

[Работа для меня]


следуйте ниже шаги

  1. Открыть Диспетчер Задач (Ctrl + Alt + Delete)
  2. под производительность выберите вкладку выберите ProjectNameOfYours.exe>.
  3. нажмите на завершить процесс.
  4. Теперь строить решения.

вышеуказанные шаги разрешили ошибку навсегда :)


Если ни один из ответов не работает, попробуйте эту простую проверку. Найдите для любого MSbuild.exe работает и держит ваш проект EXE. Убить В MSBuild.exe и вы должны быть хорошо идти.


Я, наконец, как это исправить. Почему мы не можем продолжить отладку после первой отладки, потому что первый отладочный exe все еще работает. Так что после первой отладки вам нужно перейти в Диспетчер задач - > вкладка процесса - > [имя вашего проекта exe] завершить процесс exe.

это работает для меня :)


этот вопрос был первым результатом при поиске следующая ошибка:

не удалось скопировать файл "...- потому что его не нашли.

при создании в Visual Studio 2013 (обновление 3).

решение: удаление "Productivity Power Tools" в Visual Studio 2013.

https://connect.microsoft.com/VisualStudio/feedback/details/533411


в моем случае это был Resharper Unit Tests runner (плюс тесты NUnit, никогда не было такой проблемы с MsTests). После убийства процесса удалось перестроить процесс, не перезапуская ОС или VS2013


Я не знал, что у меня все еще есть отладчик, и пытался построить в том же экземпляре Visual Studio. Как только я остановил отладчик, я смог его построить.


убийство vstest.executionengine.exe process (es) решает эту проблему в 90% случаев для меня. Если это не сработает, то и убийство QTAgent32.exe а затем удаление папок /bin и /obj для рассматриваемого проекта работает.

Это самая раздражающая часть моего рабочего дня. :)


для меня это был антивирус Avast, который не позволит visual studio писать/читать / выполнять файл. Поэтому мне пришлось добавить папку Visual studio 2010/2012 в список исключений антивируса. И сразу после этого баам... это работает.


убедитесь, что U закрыть все экземпляры wcfSvcHost и попробуйте снова. У меня получилось!


Я заметил некоторые ответы, которые решили мою проблему, но, на всякий случай, у кого-то есть та же проблема, что и у меня.

ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ: ПРЕЖДЕ ЧЕМ ДЕЛАТЬ ЧТО-ЛИБО ЕЩЕ.

убедитесь, что вы закрыли все окна консоли, которые могли быть открыты из предыдущей сборки. Например, я просто тестировал какой-то код в консольном приложении, я не понял, что окно консоли с одного из предыдущих раз, когда я запускал свою программу, было открыто. За это сеанс я отлаживал, окно было задвинуто назад, и я не мог его видеть. Просто говорю, что это может быть ваша проблема, поэтому проверьте, чтобы убедиться, что это не проблема.