Подтвердить что ты не робот

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

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

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

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

Я попытался создать pre-build script, чтобы попытаться удалить этот файл, но он заблокирован Visual Studio.

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

4b9b3361

Ответ 1

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

Ответ 2

По состоянию на октябрь 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

Ответ 3

Вы можете попытаться убить процесс 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

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

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

Я надеюсь, что это поможет кому-то.

Ответ 5

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

Хорошо... это может показаться довольно сумасшедшим.

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

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

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

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

Ответ 6

В моем случае я сделал Project Properties → Security Tab → Uncheck Click-Once параметры безопасности (если он установлен). Это сработало для меня. В моем проекте он показывал эту ошибку для dll С++, используемого в моем проекте С#.

Ответ 7

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

Ответ 8

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

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

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

У меня возникла ошибка "не получить доступ к файлу" при выполнении сборки релиза. Ссылки были на версии Debug exe/dll. Я подозреваю, что это смешение является тем, что вызывает ошибку в VS.

Ответ 9

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

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

Ответ 10

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

Ответ 11

Я не могу написать комментарий, так как не в 50 точках, но для меня я исключил свою папку проекта в ESET Enpoint Security ver 5. Кажется, он заблокировал/забил некоторые файлы. Моя ошибка не указала, какой exe или файл использовался, поэтому потребовалось много времени, чтобы, наконец, дойти до того, что JoeC сказал об антивирусе и попробовал. Кажется, сейчас работает (Visual Studio 2010 SP1)

Ответ 12

Закрытие недавно измененного User Controls решило проблему в моем сценарии. Надеюсь, это поможет кому-то там.

Ответ 14

Попробуйте удалить Windows Live SYNC. Это все еще происходит?

Ответ 15

Я думаю, что я только нашел виновника и решение.

Перейдите в сервисы и остановите и отключите службу поиска окон.

Это решило проблему для меня сейчас.

Ответ 16

Для меня решение заключалось в том, чтобы изменить проект запуска на dll (проблема возникает только в режиме отладки при наличии приложения в качестве запуска). Если ваше решение содержит несколько проектов (и оно будет, и оно будет содержать .dll, иначе вы не получите проблему), переключитесь на этот .dll, no.vshost.exe, без проблем.

Кроме того, убийство .vshost.exe не сработало для меня, так как сразу после запуска снова он заблокировал .dll.

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

Краткая статья от меня по этой проблеме (и мое решение)

Как "очистить" ваши ссылки в решении

Ответ 17

Для меня сработало добавление следующего к событию Pre-build общей dll:

if exist "$(TargetPath).locked*" del "$(TargetPath).locked*"
set exitprebuildfor$(ProjectName)=
for /l %%a in (1,1,10) do (
  if defined exitprebuildfor$(ProjectName) goto :ok
  if not exist "$(TargetPath).locked%%a" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked%%a" & set exitprebuildfor$(ProjectName)=1)
:ok
set exitprebuildfor$(ProjectName)=

Это основано на решении здесь, но вместо того, чтобы просто переименовать dll в .locked, он пытается переименовать его в .locked1, locked2, Используя 10, я обычно сталкиваюсь с проблемой один раз в день, но можно использовать значение ant.

Ответ 18

Просто сделайте копию всего проекта и запустите проект из новой копии... он будет работать нормально. Но вам придется закончить процесс отладки каким-то образом, чтобы удалить старый проект.

Ответ 19

Остановите службу IIS и попробуйте создать ее снова, или если вы можете позволить себе перезагрузить компьютер, попробуйте. Работал для меня в обоих направлениях.

Приветствия

Ответ 20

Моя проблема заключалась в том, что Outlook 2010 (outlook.exe) использовал тот же порт, что и мой проект ASP.NET MVC с IIS express.

Решение: закройте outlook.exe, запустите решение и снова откройте Outlook (чтобы он использовал другой порт).

Надеюсь, это поможет кому-то, потому что я получил такое же сообщение об ошибке, как описано в этом разделе.

Ответ 21

Попробуйте удалить файл .exe в папку отладки или выпуска (независимо от того, что вы работаете) Windows сообщит, что процесс X открыл это, и вы не можете удалить его после этого перейдите к диспетчеру задач и в деталях вкладка завершения задачи X процесс

Ответ 22

Удалить obj файл. И остановите свою службу и снова перезапустите. Затем вы можете решить проблему.

Ответ 23

Лучшее решение для меня состояло в том, чтобы перенести мои файлы проекта из "Мои документы", который находится на сервере, управляемом ИТ-отделом, и локализовать их локально на моем диске C. Также работает: снимите флажок "Включить процесс хостинга Visual Studio", как заявили другие люди.

Ответ 24

Если вы работаете над проектом С#, использующим ссылку на C DLL, вы можете устранить ошибку, установив флажок "Разрешить небезопасный код". Я знаю, что не использовал указатели в моем проекте С#, но я использовал некоторый побитовый оператор в С#. Возможно, эти C-подобные функции превратили его в код "Unsafe".

Ответ 25

Что работало для меня, было удаление статуса "только для чтения" в папке bin. Как только я это сделал, он работал с тех пор.

Ответ 26

У меня была эта ошибка, когда проект находится на удаленном ресурсе (например, если ваш $env: домашний путь с помощью вашего ИТ-отдела перенаправлен на сетевой ресурс). Убедитесь, что ваш проект находится на локальном диске.

Ответ 27

Моя проблема началась после создания настраиваемого элемента управления и перетаскивания его в палитру инструментов, чтобы использовать его в формах дизайна. Сначала появилось предупреждение о том, что между исходным файлом пользовательского контроля (.cs) и исполняемыми файлами проекта (.exe) существует избыточность. При выполнении/отладке появилась ошибка: невозможно получить доступ к (.exe), потому что она используется (и это было правдой).

В буквальном смысле удаленный весь исходный код, касающийся настраиваемого элемента управления, и последняя проблема никогда не останавливалась, пока я не проверил ссылки, и он ссылался на себя, чтобы иметь возможность "получить" прежний пользовательский элемент управления. Я удалил ссылку и сделал!!

Итак: просто проверьте ссылки и удалите самооценку для проекта.

Ответ 28

Удалите папку Bin и запустите приложение. Это сработало для меня.:)

Ответ 29

Просто отключите хостинг Visual Studio при отладке, запустите проект и снова запустите его и запустите проект.

Откройте проект в Visual Studio.

. В меню "Проект" выберите "Свойства".

. Перейдите на вкладку "Отладка".

. Снимите флажок Включить процесс хостинга Visual Studio.

Ответ 30

Для проекта Windows

Процесс хостинга Visual Studio может содержать указатель исполняемого файла. Чтобы остановить экземпляр хоста, откройте Project properties, а затем перейдите на вкладку Debug. Теперь снимите флажок Enable the Visual Studio hosting Process, а затем снова установите флажок для отладки.

Для веб-проекта

IIS может содержать указатель файла. Перезапуск IIS может решить проблему.