VisualStudio2010 Отладка - процесс не может получить доступ к файлу ... потому что он используется другим процессом - PullRequest
49 голосов
/ 22 апреля 2010

Я не могу отладить приложение WinForms C # с помощью выпущенной версии Visual Studio 2010 Prof.

Я получаю следующее сообщение об ошибке после второго запуска отладки.

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

Я пытался выполнить предварительную сборку сценария, чтобы попытаться удалить этот файл, но он заблокирован Visual Studio.

В сети есть несколько ссылок на это, так что это известная проблема. У кого-нибудь есть исправление или эффективный обходной путь?

Ответы [ 30 ]

29 голосов
/ 03 августа 2010

Мне показалось, что эту проблему очень легко воспроизвести, и исправление для меня - это вариант ответа Ричарда Форса. Если в конструкторе открыть UserControl, запустить отладчик и отредактировать UserControl, последующее перестроение завершится неудачно. Если я закрываю UserControl перед запуском отладчика, я никогда не получаю эту ошибку, поэтому я просто закрываю окно конструктора перед нажатием F5.

27 голосов
/ 31 октября 2012

По состоянию на октябрь 2012 года, у меня все еще есть эта проблема, поэтому VS 2010 SP1 не решил проблему. То, что я делал и работал последовательно, это отключил процесс хостинга в проектах.

Чтобы отключить процесс хостинга:

.  Open a project in Visual Studio.

.  On the Project menu, click Properties.

.  Click the Debug tab.

.  Clear the Enable the Visual Studio hosting process check box.

Источник: http://msdn.microsoft.com/en-us/library/ms185330(v=vs.100).aspx

21 голосов
/ 22 апреля 2010

Вы можете попытаться убить процесс vshost.exe:

taskkill /F /IM "Arrowgrass Reports.vshosts.exe"

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

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 
4 голосов
/ 05 августа 2011

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

Хорошо ... это может звучать довольно безумно.

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

Я обнаружил, что просто собираюсь просмотреть открытые файлы с помощью:

Computer Management (compmgmt.msc)->Shared Folders->Open Files

"Освободит" тот файл, который заблокирован. Очень странно, но у меня это работает!

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

Отключение поиска Windows не помогло мне. Однако отключение антивируса было сделано (наш антивирус - Symantec Endpoint Protection 11)

Таким образом, я смог исправить это самостоятельно, изменив параметры отладки в проекте, указав рабочую папку на пути к диску C:, а затем исключив этот путь из параметров антивирусной автоматической защиты.

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 18 августа 2014

В моем случае я сделал Свойства проекта -> Вкладка «Безопасность» -> Снимите флажок «Настройки однократной защиты» (если флажок установлен).Это сработало для меня.В моем проекте она показывала эту ошибку для DLL C ++, используемой в моем проекте C #.

1 голос
/ 22 августа 2011

Ошибка («процесс не может получить доступ к файлу… потому что он используется другим процессом»), когда я изменил решение (Visual Studio 2010 C # Express с пакетом обновления 1) из двух больших (10 исходных файлов, ~ 500 строк) на файл) проекты, в которых один ссылается на другой, на множество (6) небольших проектов с большим количеством проектов, ссылающихся на другие проекты.

Ссылки были на файлы dll- и exe (их версии Debug), а НЕ на проекты, даже если проекты находились в одном решении.

Затем я узнал, что для правильной работы F12 должны быть ссылки на проекты, а не файлы. Поэтому я изменил ссылки. Это заставило F12 работать (переход к исходному файлу вместо некоторого автоматически сгенерированного описания интерфейса), и в то же время ошибка «невозможно получить доступ к файлу» во время сборки.

Я получаю только ошибку «невозможно получить доступ к файлу» при выполнении сборок Release. Ссылки были на отладочные версии exe / dll's. Я подозреваю, что это смешивание вызывает ошибку в VS.

1 голос
/ 27 апреля 2011

Описанное условие также может быть вызвано тем, что DLL или EXE ссылаются на себя; в этом случае описанный выше тест Process Explorer никогда не возвращает совпадения (например, он не запущен). Эта неожиданная ситуация, кажется, вызвана во время некоторой последовательности операций в VS2010 (и, вероятно, во всех предыдущих версиях), которая коварно добавляет ссылку за кулисы. Конкретная причина этого не была обнаружена (или устранена, о которой я знаю). Чтобы проверить и устранить эту ошибку, просто убедитесь, что DLL или EXE-файл, который нарушил работу, не указан в качестве ссылки на себя.

1 голос
/ 08 августа 2012

Я столкнулся с этой проблемой при разработке служб Windows. Я узнал, что это происходит, когда служба работает. Таким образом, вам нужно только остановить службу (из консоли services.msc), и все готово!

Надеюсь, это поможет. Тиджани.

1 голос
/ 05 декабря 2012

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

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