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

ASP.Net не может создать/теневую копию

Я неоднократно получаю эту ошибку при разработке приложений ASP.Net:

  Cannot create/shadow copy 'XXXXX' when that file already exists

Где XXXXX - случайная DLL. Как правило, DLL является одной из библиотек DLL от Microsoft Enterprise Library, но она варьируется.

Это действительно случайный, и это очень расстраивает. Я поеду без ошибок, а затем получаю эту ошибку каждые 10-20 минут.

Я видел несколько решений. Например, этот вопрос. Я попытался использовать параметр "Чистое решение", и я также просто перезапустил локальный IIS. Тем не менее, он по-прежнему происходит с той же случайной, но постоянной частотой.

Я также видел, как многие люди упоминают использование этой опции в файле конфигурации:

<hostingEnvironment shadowCopyBinAssemblies="false" />

Однако другие говорили, что это проблематично, и его, безусловно, не следует использовать в производстве.

Итак, должен ли я просто отказаться и попробовать параметр shadowCopyBinAssemblies? (И не копируйте это изменение в другие среды.) Я единственный, кто часто задает эту проблему?

Примечание. Я использую Visual Studio 2008.

4b9b3361

Ответ 1

Ниже описаны обходные пути этой проблемы, связанные с отсутствием соединения:

  • добавьте <hostingEnvironment shadowCopyBinAssemblies="false" /> в раздел <system.web> вашего файла web.config.
  • Перезапустите Cassini, когда вы столкнетесь с проблемой.
  • Если вы получите ошибку, остановите отладчик, щелкните правой кнопкой мыши по решению и "очистите решение". Хит F5 для перезапуска отладчика. Это действительно раздражает, так как у меня есть коэффициент отказов 50% для меня, и вы думаете, что не должно быть ручной опции CLEAN SOLUTION! Это приложение POS за 1200 долларов США должно очистить его автоматически!
  • Вот еще одно обходное решение, которое может быть более привлекательным для некоторых, любезно предоставлено Гэри Фарром (http://blogs.claritycon.com/blogs/gary_farr/archive/2007/03/09/2888.aspx).
  • Добавьте следующие события для предварительной сборки:

    IF EXIST $(TargetPath).LOCKED (del $(TargetPath).LOCKED) ELSE (IF EXIST $(TargetPath) (move $(TargetPath) $(TargetPath).LOCKED))

  • Обходной путь, который выполняет эту работу для меня, вместо использования "Build" использует "Build Solution"

  • После успешной сборки я считаю до десяти, затем обновляю свою веб-форму.
  • Я обнаружил, что перерегистрация ASP.NET для IIS проблема "уходит" - с тех пор у меня не было проблемы. Вам нужно будет запустить следующее в командной строке:
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i. Это более чем вероятно не сработает для всех - это сложная проблема.
  • перезапустить VS.
  • При очистке решения было выдано несколько предупреждений о файлах, которые невозможно удалить. Эти файлы имели свой набор свойств только для чтения. После установки свойства этих файлов для чтения/записи проблема была решена.
  • Перезапустить IIS

РЕДАКТИРОВАТЬ: Элементы, извлеченные из старой версии страницы (с разрешения archive.org).

Ответ 2

Подождите где-нибудь между 10-30 секундами и нажмите "Обновить". По какой-то причине это всегда работает для меня.

Ответ 3

Просто перезапустите Visual Studio, которая сработала для меня.

Ответ 4

Откройте свойства проекта, откройте вкладку "Веб" и убедитесь, что параметр "Включить редактирование и продолжение" не установлен.

Ответ 5

В моей ситуации работал только iisreset.

Ответ 6

Я часто сталкивался с этой проблемой при работе с импортированной DLL, которую мы создали.

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

Кроме того, я не видел проблемы с работы в Visual Studio 2002. 2008 у меня нет этой проблемы, о которой я знаю, а также нет. Используете ли вы старый VS?

Ответ 7

Перейдите в режим разработки, а затем щелкните правой кнопкой мыши и нажмите на просмотр в браузере, проблема исчезнет. Анил Мадан

Ответ 8

Добавьте эти строки в командную строку события pre-build, которая в основном открывает DLL в Visual Studio:

 IF EXIST $(TargetPath).LOCKED  (del $(TargetPath).LOCKED)
  ELSE (IF EXIST $(TargetPath) (move $(TargetPath) $(TargetPath).LOCKED))

Повторно скомпилировать и не удалось скопировать DLL-ошибку не произойдет.

Ответ 9

Если вы используете Entity Framework:

Сообщение об ошибке: "Невозможно создать/теневую копию", если этот файл уже существует ".

Решение: "Подождите несколько секунд и обновите страницу".

Для получения дополнительной информации посетите: Расширенная инфраструктура Entity 6 Сценарии для веб-приложение MVC 5 (12 из 12)

Ответ 10

Я получал ту же проблему, поставив этот код в web.config для меня.

<hostingEnvironment shadowCopyBinAssemblies="false" />

Ответ 11

Вы просто обновляете (F5) свою страницу.

Ответ 12

Очистите и снова постройте. Это помогает мне, и это часто сработало для меня.