Ошибка сборки: «Процесс не может получить доступ к файлу, потому что он используется другим процессом» - PullRequest
77 голосов
/ 27 февраля 2011

У меня есть приложение на C # webforms, которое до сегодняшнего дня работало просто плавно.

Теперь сегодня, внезапно, каждый раз, когда я пытаюсь запустить приложение, я получаю блокировку файлаошибка:

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

Поиск ошибки не дает ничего, кроме очевидного, то есть VS считает,файл заблокированИ определенно Visual Studio сама блокирует файл, потому что, когда я закрываю VS и снова открываю его, проект выполняется нормально - в первый раз.Когда я пытаюсь запустить его второй раз, я получаю ошибку блокировки файла.

Закрытие VS и повторное открытие каждый раз, когда я хочу запустить приложение, не является приемлемым решением!Как узнать, что блокирует файл, и предотвратить его блокировку?

РЕДАКТИРОВАТЬ: Еще одно интересное открытие: мне даже не нужно запускать приложение.Простая компиляция вызывает блокировку файла;Я не могу скомпилировать два раза подряд!

Эта проблема относится к одному проекту в моем решении.Все остальные проекты работают нормально и могут выполняться столько раз, сколько мне нравится.Только этот проект заперт.

Ответы [ 23 ]

112 голосов
/ 16 мая 2013

Я нашел простое решение, которое работает для меня.Это выглядит так:

Когда возникает проблема, просто измените конфигурацию здания вверху (если в «Release» на «Debug» и наоборот), соберите, а затем вернитесь к предыдущей конфигурации и соберите снова.

screenshot

Полагаю, что при изменении конфигурации освобождаются vcshost и devenv.

24 голосов
/ 28 февраля 2011

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

... и все по-прежнему работало нормально.

Я сделал сравнение с контролем исходного кода моего оригинального .csproj; никаких реальных отличий. И даже когда я попытался вернуться к предыдущей версии .csproj, он все равно работал.

Черная магия. Если это работает, иногда лучше не спрашивать почему - просто примите это и двигайтесь дальше ...

РЕДАКТИРОВАТЬ: Проблема является повторяющейся, и я считаю, что я изолировал ее, когда у меня открыт конструктор форм абстрактной / универсальной формы во время компиляции.

Извлеченный урок: Перед компиляцией убедитесь, что конструктор форм любых абстрактных или универсальных форм или элементов управления закрыт! Если нет, вы должны закрыть VS и снова открыть!

16 голосов
/ 30 декабря 2014

Здесь мы обнаружили следующее: На странице свойств проекта на вкладке «Отладка» снимите флажок «Включить процесс размещения Visual Studio». Я не уверен, для чего предназначено это свойство, но оно выполняет работу, если его не проверять.

9 голосов
/ 31 июля 2013

На самом деле вы должны отметить «Включить процесс размещения Visual Studio». По крайней мере, для VS2010 в любом случае. И у меня тоже есть:

если существует "$ (TargetPath) .locked" del "$ (TargetPath) .locked" если существует "$ (TargetPath)", если не существует "$ (TargetPath) .locked" move "$ (TargetPath)" "$ (TargetPath) .locked"

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

Также обратите внимание, что -app-vshost.exe работает в фоновом режиме, даже если не выполняется отладка. Это то, что заставляет его успешно строить и запускать каждый раз, когда я думаю. Это не было раньше. И я также попытался очистить папки отладки и выпуска и постоянно менять тип цели, и ничего не получалось, кроме как описано выше. Мое решение раньше заключалось в том, чтобы просто подождать 5 минут между сборками, которые были очень раздражающими и отнимающими много времени, чтобы что-то сделать. Я не видел каких-либо изменений в поведении, когда имело значение, какие вкладки, где открыты или XNA против окон создаются или открываются дизайнеры. Эта проблема возникала в 32-разрядных или 64-разрядных сборках, и не имело значения, уничтожил ли я приложение с помощью ALT-F4 или убил его с помощью диспетчера задач, что, теоретически, не позволило бы приложению закрыть или освободить ресурсы. Сначала я подумал, что это проблема сбора мусора.

5 голосов
/ 16 мая 2013

Немного опоздал на ответ, но я решил эту проблему, перейдя в свойства проекта> вкладка "Отладка"> сняв флажок "Включить процесс размещения Visual Studio".

4 голосов
/ 26 июля 2017

VS2017 - решено путем закрытия всех экземпляров MSBuild.exe в диспетчере задач Windows

3 голосов
/ 11 июня 2015

Я преодолел эту проблему, переименовав заблокированный файл (используя Windows Explorer).Мне не разрешили удалить файл, но переименование заблокированного файла работает!

3 голосов
/ 03 марта 2017

Я решил это, удалив папку bin \ Debug и, возможно, перезапустив VS

1 голос
/ 21 июля 2017

Просто, чтобы бросить мои 2 цента. Моя проблема была решена путем открытия диспетчера задач и уничтожения приложения. Он работал в фоновом режиме без каких-либо признаков того, что он вообще работал (без элементов на панели задач, без интерфейса, ничего), но я не уверен, почему это произошло. Очевидно, что отладчик не работал, и у меня был только один открытый экземпляр VS в то время. Меня удивляет, что это все еще происходит в этом VS 2017.

Возможно, я могу добавить шаг сборки, который ищет приложение, работающее в фоновом режиме, и убивает его перед запуском нового.

1 голос
/ 17 мая 2017

У меня была такая же проблема с моим приложением Xamarin в visual studio, и она была решена путем отключения моего тестового мобильного устройства.Приложение было закрыто, а отладчик остановлен, но ошибка все еще возникала при попытке построить или перестроить решение.Он остановился только после того, как я отключил устройство, потому что мне нужно было принять вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...