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

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

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 

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

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

введите описание изображения здесьвведите описание изображения здесь

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

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

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

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

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

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

В 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 и выполните сборку.

Например, assembly / отладка сеанса 1 оставляет MyProject.pdb заблокированным.
В следующий раз, когда вы создадите:
MyProject.pdb -> MyProject.old.pdb

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

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

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

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

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

Постоянное решение: вам нужно закрыть приложение с помощью кодирования. Вот код …

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

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

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

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

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

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

Вы должны отключить антивирус (особенно если это Avast) и повторите попытку. Это помогло мне. Проблема в том, что debugger / builder создает файл .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. Процесс не может получить доступ к файлу ‘bin \ YourProjectName.dll’, потому что он используется другим процессом

Решение

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

Вы хороши 2 GO!

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

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

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

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

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

Надеюсь это поможет…

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

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

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

Поэтому вместо этого

введите описание изображения здесь

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

введите описание изображения здесь

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

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

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

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

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

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

Стефано

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

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

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

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

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

@ Ответ Джеффа ( 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. Снимите флажок «Включить визуальный студийный хостинг»
  4. Начать отладку [F5]
  5. Вы получите предупреждение о безопасности, просто «хорошо». Позволяет запускать приложение
  6. Остановить отладку.
  7. Установите флажок «Включить процесс хостинга визуальной студии» на вкладке «Отладка»,
  8. Теперь попробуйте начать отладку, вы не увидите ошибку снова

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

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

  1. Откройте диспетчер задач (Ctrl + Alt + Delete)
  2. В разделе « Производительность » выберите < ProjectNameOfYours.exe >.
  3. Нажмите «Завершить процесс».
  4. Теперь создайте решение.

Над шагами исправлена ​​ошибка навсегда 🙂

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

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

меня устраивает 🙂

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

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

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

Решение: Деинсталляция «Электроинструментов производительности» в Visual Studio 2013.

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

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

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

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

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

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

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

  • Самый быстрый способ вычисления 128-битного целого по модулю 64-разрядного целого числа
  • Есть ли альтернатива Maven или порт для мира .NET?
  • Как ссылаться на сборки .NET с помощью PowerShell
  • Определите, были ли сборки .NET построены из одного источника
  • Сделать муравей тихий без флага -q?
  • использование ILMerge с библиотеками .NET 4
  • Очень быстро memcpy для обработки изображений?
  • Безопасно ли читать конец конца буфера на одной странице на x86 и x64?
  • Примеры предварительной выборки?
  • Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?
  • Как я могу перечислить все загруженные сборки?
  • Давайте будем гением компьютера.