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

Не удалось скопировать файл reference.dll в bin/reference.dll. Процесс не может получить доступ к файлу reference.dll, поскольку он используется другим процессом

Для одного из моих приложений ASP.NET 3.5 каждый раз, когда я пытаюсь создать веб-приложение, он вызывает следующие ошибки сборки в Visual Studio 2008:

Ошибка 165 Не удается скопировать файл "C:\InOne\Common\DexProcessor\bin\Debug\DexProcessor.dll" в "bin\DexProcessor.dll". Процесс не может получить доступ к файлу 'bin\DexProcessor.dll', потому что он используется другим процессом. InVision2 Ошибка 166 Не удалось скопировать файл "C:\InOne\Common\DexParser\bin\Debug\InOne.DexParser.dll" в "bin\InOne.DexParser.dll". Процесс не может получить доступ к файлу 'bin\InOne.DexParser.dll', потому что он используется другим процессом. InVision2 Ошибка 167 Не удалось скопировать файл "C:\InOne\Common\AlertProcessor\bin\Debug\InOne.Invision.AlertProcessing.dll" в "bin\InOne.Invision.AlertProcessing.dll". Процесс не может получить доступ к файлу 'bin\InOne.Invision.AlertProcessing.dll', потому что он используется другим процессом. InVision2 Ошибка 168 Не удается скопировать файл "C:\InOne\Common\InVision.BusinessLogic\bin\Debug\InVision.BusinessLogic.dll" в "bin\InVision.BusinessLogic.dll". Процесс не может получить доступ к файлу 'bin\InVision.BusinessLogic.dll', потому что он используется другим процессом. InVision2 Ошибка 169 Не удалось скопировать файл "C:\InOne\Common\InVision.Common\bin\Debug\InVision.Common.dll" в "bin\InVision.Common.dll". Процесс не может получить доступ к файлу 'bin\InVision.Common.dll', потому что он используется другим процессом. InVision2 Ошибка 170 Не удалось скопировать файл "C:\InOne\Data\bin\Debug\InVision.Data.dll" в "bin\InVision.Data.dll". Этот процесс не может получить доступ к файлу 'bin\InVision.Data.dll', потому что он используется другим процессом. InVision2 Ошибка 171 Не удалось скопировать файл "C:\InOne\Common\InVision.DataAccessLayer\bin\Debug\InVision.DataAccessLayer.dll" в "bin\InVision.DataAccessLayer.dll". Процесс не может получить доступ к файлу 'bin\InVision.DataAccessLayer.dll', потому что он используется другим процессом. InVision2 Ошибка 172 Не удалось скопировать файл "C:\InOne\Common\InVision.DataAccessLayer.SqlClient\bin\Debug\InVision.DataAccessLayer.SqlClient.dll" в "bin\InVision.DataAccessLayer.SqlClient.dll". Этот процесс не может получить доступ к файлу 'bin\InVision.DataAccessLayer.SqlClient.dll', потому что он используется другим процессом. InVision2

Это только что началось неделю назад и очень раздражает... Я должен зайти в папку bin в веб-приложении и удалить файлы pdb, а затем это позволит мне удалить DLL большую часть времени. Время от времени это не позволяет мне закрывать Visual Studio, а затем он позволяет мне удалять их. Я проверил и это Visual Studio (devenv), который блокирует DLL. Перезагрузка машины не помогает.

Это действительно снижает мою производительность, есть ли что-нибудь, что я могу сделать, чтобы решить эту проблему?


Как уже упоминалось, Visual Studio 2008 (devenv.exe) - это процесс блокировки библиотек DLL.

Я заметил что-то... Когда он компилируется успешно, он копирует все библиотеки DLL в папку bin, а затем все они удаляются, а затем новый набор копируется в корзину. Когда это не удастся, первый набор DLL файлов будет скопирован, а затем он не сработает. Поэтому, похоже, он использует папку bin для 2 вещей, когда это должно быть только для 1. Помогает ли это?

4b9b3361

Ответ 1

Проблема закончилась тем, что в web.config кто-то добавил:

hostingEnvironment shadowCopyBinAssemblies="false"

Прокомментировав это, все началось нормально. Какой кошмар!

Ответ 2

Используйте ProcessExplorer для узнать, какой процесс открыт для файла и оттуда.

Если процесс использует эти DLL файлы, их нельзя удалить и перезаписать. При компиляции вам придется убить или иным образом остановить процесс, используя эти DLL.

Ответ 3

Я боролся с этой проблемой в течение лет!

Вы пытались добавить это к вашему событию PREBUILD?

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

Смотрите это для получения дополнительной информации: http://nayyeri.net/file-lock-issue-in-visual-studio-when-building-a-project

Вот еще один поток, с большим количеством вещей, чтобы попробовать...

http://social.msdn.microsoft.com/forums/en-US/Vsexpressinstall/thread/5b71eb06-5047-483d-8fd3-b75c102d41e9/?prof=required

Ответ 4

Что сработало для меня, это следующее событие предварительной сборки:

if exist "$(TargetPath).locked.bak" del "$(TargetPath).locked.bak"
if exist "$(TargetPath).bak" del "$(TargetPath).bak"
if exist "$(TargetPath).locked" ren "$(TargetPath).locked" "$(TargetFileName).locked.bak"
if exist "$(TargetPath)" ren "$(TargetPath)" "$(TargetFileName).bak"

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

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

Ответ 5

Я просто хотел сказать, что эта проблема началась со мной сегодня. (VS 2010, С#) Я работаю над этой программой в течение месяца без этой проблемы, теперь она началась. Я запускаю VS, меняю код, компилирую и тестирую и завершаю программу. Сделайте другое изменение, скомпилируйте и BOOM Не удалось скопировать файл "obj\x86\Debug\progname.exe" в "bin\Debug\progname.exe", потому что если он используется другим процессом.

ProcExp показывает только Visual Studio (фактически devenv.exe), используя этот файл. Существует только один экземпляр VS. В моем debug\progname.exe есть два списка: один тип DLL, другой - дескриптор типа.

Использование devenv/ResetSettings ничего не разрешило, но потрачено впустую на 10 минут, возвращая все обратно к моему желаемому виду.

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

Имя файла debug\progname.exe остается заблокированным даже после закрытия проекта.

Закрывая VS, вручную удаляйте файлы в папке отладки, открывая VS и мое решение, а затем Build- > Clean Solution работает для меня, по крайней мере, теперь работает, после того как я сделал все это.

Надеюсь, что это поможет -rwg

Ответ 6

Мне не повезло с событиями предварительной сборки, к сожалению. То, что работало, в типичной модели IT Crowd, заключалось в том, чтобы закрыть Visual Studio и снова открыть его.

Ответ 7

Простое исправление для Windows 7: Запустите сервис "Опыт применения". Найдите "Услуги" в "Панели управления".

-Martin

Ответ 8

Если у вас есть Visual Nunit, это должен быть файл dll для блокировки.

  • Закрыть VS
  • Перейдите в taks manager, убейте процесс Visual Nunit
  • Теперь откройте VS и постройте проект

Ответ 9

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

У меня есть более легкое, но не очень эффективное решение проблемы. Очистка проекта или решения решает проблему.

Ответ 10

Просто перейдите в \Debug\bin и удалите все DLL файлы.

Отлично работает для меня.

Ответ 11

У меня была эта проблема в веб-проекте с System.Web.Extensions.dll из папки Microsoft Reference Assemblies. Установка "Скопировать местное" в значение false в ссылочных свойствах исправлена.

Ответ 12

Вы можете скачать отличную программу SysInternals Handle. Это скажет вам, какие процессы имеют блокировку для соответствующих файлов.

Если это внешняя программа (например, сканер/индексатор вирусов), это должно помочь. Если он просто сообщает Visual Studio (devenv.exe) в качестве виновника, то он будет менее полезен!

Ответ 13

Я предполагаю, что вы уже знаете это VS2008, который блокирует файлы. Вы можете попробовать запустить MSBuild из командной строки и посмотреть, исчезли ли проблемы. К сожалению, Visual Studio может заблокировать файлы, если это не стоит, в некоторых труднодоступных сценариях.

Ответ 14

Блокировки файлов - это всего лишь часть работы с Visual Studio. Нет никаких отличных способов обойти эту проблему.

Ответ 15

В Visual Studio 2008 произошла ошибка, которая была исправлена ​​в пакете обновления 1 (SP1), которая может быть вашей проблемой. Это происходит, когда вы ссылаетесь на встроенный файл JavaScript и вызываете проблему, которую видите. Подробнее см. здесь.

Ответ 16

У меня была проблема simillar решение для меня было посмотреть на файл *.csproj, и я обнаружил, что отсутствующий файл так и снизу был правильным, поэтому я просто удалил строки, и он сразу сработал

Ответ 17

Удаление следующих строк из моего app.config решило это для меня - я использую VS2010.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
          <assemblyIdentity name="nunit.framework" publicKeyToken="96D09A1EB7F44A77" culture="neutral"/>
          <bindingRedirect oldVersion="0.0.0.0-2.5.7.10213" newVersion="2.5.7.10213"/>
      </dependentAssembly>
  </assemblyBinding>
</runtime>

Ответ 18

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

Ответ 19

Файл нельзя удалить, к счастью можно переименовать и переместить. Поэтому я создал сборку prebuild (используя дату и время как случайную строку, могут быть более простые способы):

For /f "Tokens=2,3,4 Delims=/. " %%i In ("%Date%") Do @(
  Set Month=%%i& Set Day=%%j& Set Year=%%k
)

set ActDate=%Year%-%Month%-%Day%

For /f "Tokens=1,2,3 Delims=/.:, " %%i In ("%Time%") Do @(
  Set Hour=0%%i& Set Min=%%j& Set Sec=%%k
)

set ActTime=%Hour:~-2,2%-%Min%-%Sec%

move c:\MyProject\bin\Debug\myproject.exe c:\garbage\%ActDate%_%ActTime%_myproject.exe

Ответ 20

Это случается со мной иногда при использовании Visual Nunit для модульных тестов.

Кажется, что процесс "VisualNunitRunner.exe" блокирует DLL файлы в целевом каталоге.

Я использовал Unlocker, чтобы найти процесс, убить его или разблокировать.

Ответ 22

Случилось только сейчас. Пришлось убить все процессы devenv.exe(после закрытия окна VS 2010 их было 3).

Ответ 23

Удалите двоичные файлы из папки bin\Debug и перекомпилируйте их. Это работает для меня.

Ответ 24

Эта проблема возникает, когда вы меняете проект из одного каталога в другой. Для ошибки копирования Shadow вы могли бы добавить эту строку в свой web.config. Чтобы исправить это, выполните следующие действия.

В файле web.config, если есть что-то вроде

<hostingEnvironment shadowCopyBinAssemblies="false" />

измените это на

<hostingEnvironment shadowCopyBinAssemblies="true" />

или удалите его. Затем он будет работать нормально

Ответ 25

Я использовал Visual Studio 2012, когда это начиналось с 7-летнего решения (второй или третий раз: я уже к этому вопросу).

Я попробовал различные вуду. Я очистил раствор. Не работает. Я перезапустил Visual Studio. Не работает. Я был уверен, что последний будет работать, потому что это вуду, который работал в прошлый раз.

В конце концов, я вспомнил, что обновление для системы безопасности было установлено прошлой ночью и было настроено, когда я начал свою машину этим утром - (Подключен или нет? Нет идеи). Итак, я перезапустил Windows и вуаля, все это снова работало как волшебство.

Спасибо MS за больший ум.

Ответ 26

Я также сталкиваюсь с этой проблемой. Сначала я пытаюсь удалить спорный .dll, но он показывает Access denied, затем я закрываю VS и после открытия работает нормально.

Ответ 27

Как и Benoit, но не требует установки инструмента, вы можете использовать команду tasklist (task manager) в командной строке с помощью переключателя '/m', чтобы получить список процессов с помощью dll:

tasklist/m mylocked.dll

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

Ответ 28

вы также можете удалять папки bin и obj во всех проектах в решении, а затем перестраивать решение.

Ответ 29

откройте свой проект в проводнике, щелкнув свойство папки bin и снимите флажок только для чтения, это работает в моем проекте форм xamarin

Ответ 30

Я наконец то как это исправить. Это происходит, потому что первый отладочный exe еще работает. Итак, зайдите в Диспетчер задач → Вкладка "Процесс" → [имя вашего проекта exe] и завершите процесс exe.