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

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

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

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

Weingartner.WeinCad.vhost.exe

работает (иногда), но это нервничает. Любой способ остановить это вообще?

Настройки моего отладчика

enter image description hereenter image description here

Ответ 1

Я встречал подобные сообщения об ошибках в Visual Studio 2013.

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

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

  • Закрытие Visual Studio
  • Удаление папок bin и obj и
  • Повторное открытие Visual Studio.

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

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

Ответ 2

В Visual Studio Premium 2013 (обновление 3) я решил это с помощью предварительно построенного однострочного интерфейса:

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

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

Например, сборка/отладка сеанса 1 оставляет MyProject.pdb заблокированной.
При следующем построении:
MyProject.pdbMyProject.old.pdb

Затем начинается сборка/отладка сеанса 2, и оба MyProject.pdb и MyProject.old.pdb по-прежнему заблокированы:
MyProject.old.pdbMyProject.old.old.pdb
MyProject.pdbMyProject.old.pdb

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

Цитата:

Обходной путь заключается в том, чтобы поместить это в свойство командной строки события Pre-build проектa > project (на вкладке "События сборки" ):

Фрагмент кода

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

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

Ответ 9

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

Ответ 10

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

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

enter image description here

Я изменил это на это

enter image description here

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

Ответ 11

Exception

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

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

Решение

  • Щелкните правой кнопкой мыши веб-проект, который необходимо создать.
  • Нажмите на свойства.
  • Выберите вкладку "Сборка событий" на левой стороне.
  • В командной строке Pre-build события вставьте эти две строки:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Вы хороши 2 GO!

Ответ 12

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

Не было открытых окон дизайнера, а проект был простым консольным приложением.

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

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

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

Надеюсь, что это поможет...

Ответ 13

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

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

Ответ 14

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

Ответ 15

Решение: перезагрузите ОС, он всегда работает для меня, из-за того, что процесс vshost иногда не может быть завершен.

Эта ошибка также существует в версиях VS-серии, включая VS2013.

Вы можете сослаться на ссылку: http://connect.microsoft.com/VisualStudio/feedback/details/533411

Ответ 16

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

У меня по-прежнему возникает эта проблема в VS 2015 Update 2.

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

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

Стефано

Ответ 17

Выполните следующие шаги

  • Откройте диспетчер задач (Ctrl + Alt + Delete)
  • В вкладке Производительность выберите ProjectNameOfYours.exe.
  • Нажмите "Завершить процесс".
  • Теперь создайте решение.

Вышеупомянутая ошибка устранена постоянно:)

Ответ 18

Я не могу дать решение, чтобы это не произошло, но вы можете хотя бы RENAME заблокировать файл (Windows Explorer или классическое командное окно), а затем компилировать/строить. Не нужно перезагружать или перезапускать VS201x. С некоторым опытом вы можете добавить pre-build script для удаления старых файлов или переименования, а затем вне зависимости от того, существует ли блокировка.

Ответ 19

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

Ответ 20

@Geoff (fooobar.com/questions/28289/...) ответ хороший, но он выдает код ошибки 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

Ответ 21

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

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

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

Ответ 22

  • Откройте свойства проекта [меню > проект > свойства]
  • Выберите вкладку "Отладка"
  • Снимите флажок "Включить процесс хостинга визуальной студии"
  • Начать отладку [F5]
  • Вы получите предупреждение о безопасности, просто "ok". Позволяет запускать приложения
  • Остановить отладку.
  • Установите флажок "Включить процесс хостинга визуальной студии" на вкладке "Отладка",
  • Теперь попробуйте начать отладку, вы не увидите ошибки снова

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

Ответ 23

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

Ответ 24

Наконец, как это исправить. Почему мы не можем продолжить отладку после первого отладки, потому что первый debug exe все еще работает. Чтобы после первого отладки вам нужно было перейти в диспетчер задач → вкладка "Процесс" → [название вашего проекта exe], завершите процесс exe.

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

Ответ 25

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

Не удалось скопировать файл "...", потому что он не был найден.

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

Решение: Удаление "Электроинструментов производительности" в Visual Studio 2013.

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

Ответ 26

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

Ответ 27

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

Ответ 28

Убийство процесса vstest.executionengine.exe устраняет эту проблему в 90% случаев для меня. Если это не сработает, то также можно убить QTAgent32.exe, а затем удалить папки /bin и/obj для проекта, о котором идет речь.

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

Ответ 29

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

Ответ 30

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