Visual Studio "Не вдалося скопіювати" ... під час збирання


347

Я продовжую отримувати цю помилку під час складання мого проекту 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

працює (іноді), але це мені на нерви. Будь-який спосіб зупинити це взагалі?

Мої налаштування налагодження є

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


Для мене це було спричинено ручним запуском .exe в каталозі випусків. Проблема полягала в тому, що VS не може скопіювати виконуваний файл, який все ще працює. Я спробую виправити це за допомогою належного очищення ресурсів, щоб програма не залишала висить після кнопки закриття вікна.
lahjaton_j

Є хороший підсумок цієї проблеми з типовими кроками для вирішення цього питання
LightCC

Це сталося для мене, тому що Windows Defender вирішив, що йому більше не подобається .exe з проекту VS2019, над яким я працюю. Працювали над цим протягом тижнів без жодних проблем, але сьогодні, здогадайтесь, нове оновлення не сподобалось. Довелося виключити мої папки "Джерело". Перестала відбуватися.
IronRod

Відповіді:


401

У візуальній студії 2013 я стикався з подібними повідомленнями про помилки.

Здебільшого я виявив, що така ситуація сталася, коли процес налагодження був зупинений через виняток.

Коли Clean + build не вирішив для мене цю проблему, я мав успіх, зробивши наступне:

  • Закриття Visual Studio
  • Видалення binі objпапки, і
  • Повторне відкриття Visual Studio.

Цей "помилка" існує з Visual Studio 2003.

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


8
Те саме тут, VS2013. Вихід, видалення артефактів збірки, перезапуск -> все добре.
какао

49
У мене є те саме питання, але після перезавантаження VS я отримую одну збірку, і файли знову блокуються ..
Sonic Soul

54
Це не рішення, в кращому випадку часткове рішення. Я не хочу перезапускати VS кожні 10 хв. Очищення розчину працює для мене, але очищення його кожні 10 хв також не є рішенням.
Легенди

7
З мого досвіду, VS2013 робить це принаймні 10 разів на день для мене, незалежно від того, на якій машині я розробляю. Це як помилка погіршилася. Just sayin '
AR

28
помилка все ще існує у VS 2019.
Акаш KC

107

У 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.pdb->MyProject.old.pdb

Потім запускається сеанс збирання / налагодження 2, і обидва, MyProject.pdb і MyProject.old.pdbвсе ще заблоковані:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Нарешті, перезапуск Visual Studio та свіжа збірка позбудуться обох цих дій та продовжать процес як завжди.


5
Те саме у VS2010, VS 2012
Boogier

7
Дякую, мені прекрасно працювали над тим, щоб змінити ваш приклад для використання файлів exe. Я думаю, що це може бути помилкою і в останній VS 2015 CTP.
Джонні Сковдал

Рада, що це допомогло - у мене все ще створена команда перед збіркою, і вона працює досить добре, що я забула її там!
Джефф

3
Я ненавиджу це робити головним чином, але це працює, тому це є! :) Дякуємо, що поділилися цією перлиною, Джефф!
kayleeFrye_onDeck

1
Останні (2018-03-11) Visual Studio 2017 v15.6.1: все ще проблема. Налагодження, виняток, збірки в цільовому каталозі заблоковані. Наведене вище рішення * .pdb змінено на * .dll як і раніше.
Міхель де Вольде

71

Це тому, що ви закрили свою заявку, але вона все ще працює у фоновому режимі.

Тимчасове рішення:

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

Постійне рішення: вам потрібно закрити додаток через кодування. Ось код ...

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

Ви повинні ввести цей код до події закриття форми у будь-якій формі. Приклад:

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

1
Це було саме це. Visual Studio розбився, і IIS Express все ще працює (в моєму випадку). Все, що мені потрібно було зробити, це відкрити панель завдань і клацнути правою кнопкою миші піктограму IIS Express та вийти. Дякую.
the-nick-wilson

Це працювало для мене; Я не міг видалити папки obj і bin, оскільки інший процес використовував їх. На щастя, Windows 10 насправді сказав, що звали його; як тільки його закрили в диспетчері завдань, проблеми пішли
Novastorm

25

.vhost.exe - це налагоджувальний процес, тому виявляється, що налагоджений процес не закрився належним чином. Цілком ймовірно, що у вас є помилка, яка підтримує її живим і не зупиняє процес налагодження правильно - є варіанти, щоб відключитися від процесу, коли ви натискаєте "Зупинити налагодження", а не насправді вбивати налагоджувач, так що, можливо, у вас є такий набір.

Але в цьому проблема - файл, який ви намагаєтесь скопіювати, заблокований (тобто все ще використовується) ОС, тому його запобігання копіюванню. Переконайтеся, що файл безкоштовний, і ви зможете скопіювати його.


До питань я додав свої варіанти налагодження. Я впевнений, що це повинно вбити процес, але, можливо, я не розумію деяких варіантів.
bradgonesurfing

У Visual Studio 2019мене я отримую подібне повідомлення, хоча зараз він згадує процес у деякій частині результатів (не у всіх). Мене довелося вбити через testhost.x86.exe Task Manager. Після цього, здавалося, перестали виявляти один із тестових процесів.
Андез


20

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


Хороший улов. Я назавжди ненавиджу Avast.
стік потоку

Проблема Avast була і для мене. Вимкненням екрана файлової системи було відповіддю. Я спробував додати свою папку Visual Studio \ Projects до Виключень, але це не спрацювало.
KeithB

1
У мене така ж проблема із захистом Symantec Endpoint. Хтось із ІТ-відділу підняв рівень безпеки досить високим :-) Дякую Пітср.
ssimm

Додам, що ви можете створити виняток для каталогу obj \ Debug для зручного використання замість того, щоб вимкнути AV або один із його захисних інструментів.
А. Калі

Дякую! Я виявив, що це MalwareBytes блокує мій файл .exe.
NL3294

15

Мені вдалося виправити цю проблему (VS 2010) шляхом надання наступних дій перед складанням;

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

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

1
@luckyluke, У властивостях проекту є розділ, де можна додати сценарій попереднього збирання. Скопіюйте та вставте вищезазначений сценарій у вказаному районі та відновіть проект / запустіть заявку
Nair

13

Цитата:

Вирішення проблеми полягає в тому, щоб помістити це у властивість командного рядка "Попередньо побудувати події" проекту> (на вкладці "Події збирання"):

Знімок коду

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

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

8

Виняток

У деяких випадках у Visual Studio, коли ви (Build || Rebuild) поверх запуску IISExpress, ви стикалися з цим винятком:

Неможливо скопіювати файл "obj \ Debug \ YourProjectName.dll" у бін \ YourProjectName.dll ". Процес не може отримати доступ до файлу" 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 ГО!


6

Здається, що шляхом зміни назви збірки проекту виправляється проблема.

Тож замість цього

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

Я змінюю це на це

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

Зауважте, що я просто змінив його Increment and Recallна Increment_Recall, я просто видалив пробіли. Зараз мені це добре працює.


6

Вбивство процесу w3wp.exe (IIS) часто вирішує це.
Як правило, ви можете знати процес, який має блокування у файлі, перейшовши до папки бін та намагаючись видалити його. Повідомлення про помилку, яке з’явиться, якщо інший процес використовує його, міститиме ім’я процесу, який потрібно вбити.


4

Я зіткнувся з тією ж проблемою і для VS 2012 версії 11.0.60610.01, оновлення 3 для Windows 8

Дизайнерських вікон не було відкрито, і проект був простим консольним додатком.

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

Найпростіший спосіб вирішення, який працює і займає найменший проміжок часу, - це вилучити проект із рішення, створити ще один проект у рішенні, а потім додати оригінал назад.

Це подразник і втрата часу, але це найменш дорого з усіх інших варіантів, про які я знаю.

Сподіваюся, це допомагає ...


Все, що вам потрібно зробити, це відновити все, і все добре ще протягом 10 спроб. Не так багато незручностей.
Скотт Шоу-Сміт

@Scott Shaw-Smith не працює для мене. І на основі деяких інших коментарів, які я бачив, це також не працює для інших. У моєму випадку видалення Avast виправило його.
користувач316117

4

Я думаю, що я вирішив це, знявши галочку Break all processes when one process breaksв параметрах налагодження (перший екран екрана -> другий варіант).
Це деякий час добре будується / працює, оскільки я не перевірив це.
Я використовую в своєму проекті MySql NET Connector та DevExpress. Можливо, один із них не розпоряджався з'єднаннями, прив’язками тощо. Через це активовано цей прапор.

ВЕДАЛО: безумовно, це працює! Більше "Неможливо скопіювати файл" і більше помилок дизайнера форми.


1
Жодне з інших рішень для мене не працювало. Це єдиний. Я використовую Visual Studio 2017 13.2
xleon

4

Додайте до події перед складанням свого основного проекту taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


Не дуже подобається вирішувати проблему таким чином, але це спрацювало!
Петтер Т

Я знайшов це найпростішим робочим рішенням проблеми.
dscharge

4

Мій внесок у 10 центів.

У мене досі періодично виникає ця проблема в оновленнях VS 2015.

Я виявив, що переключення цілі компіляції вирішує проблему.

Спробуйте це: якщо ви перебуваєте в DEBUG, перейдіть на RELEASE і будуйте, а потім поверніться до DEBUG. Проблеми немає.

Стефано


Так! Це воно. Це просте рішення цієї дратівливої ​​проблеми! Повністю працював для мене. Легко і швидко! Дуже дякую.
Мейстер Шніцель

1
Це працює для мене! Підказка: при відключеній налагодженні >> Параметри >> Налагодження >> Загальне >> "Використовувати керований режим сумісності" рішення не потрібно!
leon22

4

Виконайте наведені нижче дії

  1. Відкрити диспетчер завдань (Ctrl + Alt + Delete)
  2. На вкладці Ефективність виберіть < ProjectNameOfYours.exe >.
  3. Клацніть на Закінчити процес.
  4. Тепер побудувати рішення.

Наведені вище кроки усунули помилку назавжди :)


4

Якщо жодна з відповідей не працює, спробуйте цю просту перевірку. Знайдіть будь-який MSbuild.exe, який працює та тримає свій проект EXE. Вбийте MSBuild.exe, і вам слід добре піти.


2

Я не можу дати рішення, щоб цього не сталося, але ви можете принаймні ПОЗНАЧИТИ заблокований файл (windows Explorer або класичне вікно команди), а потім компілювати / скласти. Не потрібно перезавантажувати або перезавантажувати VS201x. Маючи певний досвід, ви можете додати скрипт попереднього збирання для видалення старих файлів або перейменування, а потім поза вихідним способом у випадку блокування.


2

Дивіться цю іншу відповідь . В основному, у вас можуть працювати процеси MSBuild.exe у фоновому режимі, що споживає файли ресурсів. Якщо у вас є якісь завдання до або після складання, які спричиняють запуск MSBuild за допомогою командного рядка, спробуйте додати до цієї команди прапор "/ nr: false". Але ще раз дивіться попередню відповідь для більш конкретних деталей.


Оснащення, у мене є та сама проблема з оновленням VS2015 2 - MSBuild, процес exe потрібно вбити в TaskManager, перш ніж я можу відновити його.
Нік Райт

Посилання на статтю у відповіді Джоша вище передбачає використання змінної системного середовища для відключення повторного використання вузлів у Visual Studio та MSBuild-процесі (MSBUILDDISABLENODEREUSE = 1) - це працювало для мене.
Нік Райт

2

Нарешті, як це виправити. Чому ми не можемо продовжувати налагодження після першої налагодження, тому що перша запущена програма exe все ще працює. Так що після першої налагодження вам потрібно перейти до диспетчера завдань -> вкладка процесу -> [назва вашого проекту exe], щоб закінчити процес exe.

це працює для мене :)


Нічого собі, дякую людино, саме моя проблема. Оскільки він запитує пароль користувача для мене під час роботи exe, перший раз він не запускався. Коли я намагаюся видалити це додаток у списку процесів, а потім знову налагоджувати, він працював бездоганно.
Чандрапракаш

2

@ Відповідь Джеффа ( 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

2

Якщо ви налагоджуєте шаблони T4 , то це відбувається постійно. Моє рішення (перш ніж MS виправить це) було б просто вбити цей процес:

Диспетчер завдань -> Користувач -> T4VSHostProcess.exe

Цей процес з’являється лише при налагодженні шаблону T4, а не при його запуску.


2

Ось сценарій, щоб точно позбутися цього питання:

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

Сценарій потрібно викликати з кожної події перед складанням проекту VS.

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

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


2
  1. Відкрити властивості проекту [меню> проект> властивості]
  2. Виберіть вкладку "налагодження"
  3. Зніміть прапорець "Увімкнути процес хостингу візуальної студії"
  4. Початок налагодження [F5]
  5. Ви отримаєте попередження про безпеку, просто "добре". Запуск програми
  6. Зупинити налагодження.
  7. Поставте прапорець "Увімкнути процес хостингу візуальної студії" на вкладці налагодження,
  8. Тепер спробуйте почати налагодження, ви більше не побачите помилки

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


Чому це було в -2? Це працювало і для мене. Це має нульовий сенс, але ей, якщо він працює, він працює.
Wakka02

Це постійне рішення? тобто вам потрібно робити ці 8 кроків кожен раз?
Артур Свейлс

vs17 не має можливості хостингу
John Demetriou

1

Це питання було першим результатом при пошуку наступної помилки:

Не вдалося скопіювати файл "...", оскільки його не знайдено.

під час будівництва у Visual Studio 2013 (оновлення 3).

Рішення: Видалення "Інструментів живлення продуктивності" у Visual Studio 2013.

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


Отримання цієї помилки багато разів під час складання для успадкованого проекту від TFS. Думав, що це все! Шукали це в встановлених програмах та надбудовах. Неможливо знайти цю програму електроінструментів. Де б це сховатися?
Taersious

1

У моєму випадку це був тест Resharper Unit Tests (плюс тести NUnit, ніколи не мав такої проблеми з MsTests). Після вбивства процесу вдалося відновити процес, не перезавантажуючи ОС або VS2013


Так, шукайтеJetBrains.Resharper.TaskRunner.*
Данк

1

Я не усвідомлював, що все-таки маю налагоджений налагоджувач і намагався створити той самий екземпляр Visual Studio. Одного разу я зупинив налагоджувач, який я зміг побудувати.


1

Вбивство процесу vstest.executionengine.exe вирішує цю проблему в 90% часу для мене. Якщо це не спрацьовує, тоді також знищується QTAgent32.exe, а потім видаляється папки / bin та / obj для відповідного проекту.

Це найбільш дратує частину мого робочого дня. :)


1

Для мене саме антивірус Avast не дозволив візуальній студії писати / читати / виконувати файл. Тому мені довелося додати папку Visual studio 2010/2012 до списку виключень антивірусів. І одразу після цього баам ... це працює.


1

Переконайтесь, що ви закриєте всі екземпляри wcfSvcHost і повторіть спробу. Це працювало для мене!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.