ASP.Net не может создать / теневую копию - PullRequest
41 голосов
/ 17 июня 2009

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

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

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

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

Я видел несколько решений. Например, этот вопрос . Я попытался использовать опцию «Чистое решение» и просто перезапустил свой локальный IIS. Однако это все еще происходит с той же случайной, но постоянной частотой.

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

<hostingEnvironment shadowCopyBinAssemblies="false" />

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

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

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

Ответы [ 12 ]

39 голосов
/ 17 июня 2013

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

23 голосов
/ 13 октября 2009

Следующие обходные пути взяты из теперь эта проблема несуществующей связи :

  • добавьте <hostingEnvironment shadowCopyBinAssemblies="false" /> в раздел <system.web> вашего файла web.config.
  • Перезапустите Cassini, когда у вас возникнет проблема
  • Если вы получили сообщение об ошибке, остановите отладчик, щелкните правой кнопкой мыши решение и выберите «Чистое решение». Нажмите F5, чтобы перезапустить отладчик. Это действительно раздражает, поскольку у меня более 50% отказов, и вы могли бы подумать, что не должно быть ручного параметра для ЧИСТОГО РЕШЕНИЯ! Это 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).

5 голосов
/ 14 марта 2014

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

1 голос
/ 25 апреля 2013

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

1 голос
/ 06 ноября 2012

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

0 голосов
/ 25 февраля 2017

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

0 голосов
/ 18 мая 2016

Вы только что обновили (F5) свою страницу.

0 голосов
/ 22 марта 2015

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

<hostingEnvironment shadowCopyBinAssemblies="false" />
0 голосов
/ 13 марта 2015

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

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

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

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

0 голосов
/ 13 марта 2013

Добавьте эти строки в командной строке события перед сборкой, которая в основном разблокирует DLL в Visual Studio:

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

Перекомпилируйте, и вы не сможете скопировать ошибку DLL.

...