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.
Ответы
Ответ 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
Очистите и снова постройте. Это помогает мне, и это часто сработало для меня.