Поврежденная сборка ASP.NET "Не удалось загрузить файл или сборку App_Web_*"

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

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

Странная часть этого заключается в том, что я использую проекты веб-развертывания для переименования всех моих файлов сборки в dll на основе папок. Так что folder.dll и folder.subfolder.dll вместо App_Web_jt8nxllz.dll. Тем не менее ошибка по-прежнему именует оригинальный файл App_Web_jt8nxllz.dll.

Удаление содержимого C:\WINDOWS\Microsoft.NET\Framework[64]\v...\Temporary ASP.NET Files папка работает и все нормально, но кто-нибудь знает, как предотвратить эту ошибку? Кроме того, отключение IIS или его перезапуск на самом деле не так осуществимо, когда это происходит на рабочем сервере. Возможно, очистка папки Temp на планировщике автоматически?

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

Could not load file or assembly 'App_Web_jt8nxllz, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Exception type 'System.IO.FileNotFoundException' was caught.
Source: App_Web_whv5zsvd
Target Site: Void __BuildControlTree(ASP.artists_controls_artistheader_ascx)
Stack Trace:
   at ASP.artists_controls_artistheader_ascx.__BuildControlTree(artists_controls_artistheader_ascx __ctrl)
   at ASP.artists_controls_artistheader_ascx.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.UserControl.InitializeAsUserControl(Page page)
   at ASP._artists_artist_master.__BuildControlctlArtistHeader()
   at ASP._artists_artist_master.__BuildControlctlContent(Control __ctrl)
   at System.Web.UI.CompiledTemplateBuilder.InstantiateIn(Control container)
   at ASP.master_mysite_master.__BuildControlMainContent()
   at ASP.master_mysite_master.__BuildControlform1()
   at ASP.master_mysite_master.__BuildControlBody()
   at ASP.master_mysite_master.__BuildControlTree(master_mysite_master __ctrl)
   at ASP.master_mysite_master.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection)
   at System.Web.UI.MasterPage.get_Master()
   at System.Web.UI.MasterPage.ApplyMasterRecursive(MasterPage master, IList appliedMasterFilePaths)
   at System.Web.UI.Page.ApplyMasterPage()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

3 ответа

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

Проблема:

Сайт выдает ошибку при попытке загрузить пользовательский веб-элемент управления. Как вы видите в последнем выпуске, мы добавили новый пользовательский элемент управления в другой пользовательский веб-элемент управления, который отображается по мере необходимости. Поскольку внешний самый / родительский элемент управления и новый дочерний элемент управления являются отдельными элементами управления в источнике, когда.Net Framework собирается скомпилировать один из этих двух элементов управления и не перекомпилировать другой в то же время, у вас будет устаревший файл пытается ссылаться на старую версию сборки. Тот факт, что.Net Framework добавляет случайную строку к имени сборки во время компиляции, имя вновь скомпилированного файла и предыдущей версии файла, вызывает несоответствие имени файла, и поэтому внешний / родительский элемент управления ищет файл, который больше не существует.

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

1) Установив для свойства пакетной обработки тега компиляции значение false в файле web.config

<compilation debug="false" batch="false" />

2) Вы также можете уменьшить частоту, установив numRecompileBeforeAppRestart имущество:

<compilation debug="false" numRecompilesBeforeAppRestart="50" />

См. Статью базы знаний 934839 для более подробной информации.

Исправления для проблемы после того, как она уже произошла:

1) Удалите временные файлы ASP.Net (это снимает сайт)

2) Принудительно перекомпилировать, отредактировать и сохранить файл кода для родительского / внешнего элемента управления. Это лучший вариант для исправления, чем № 1, потому что это не останавливает сайт.

Мое предложение:

1) Во-первых, я думаю, что мы должны ввести временное исправление № 1 сверху, это может предотвратить все проблемы в будущем и может быть единственным ответом, который нам нужен.

2) Во-вторых, я бы скачал и установил исправление 934839 от Microsoft в среде QA, чтобы убедиться, что оно не вызывает никаких проблем. После некоторого времени тестирования исправления в QA я установил бы исправление, чтобы иметь постоянное исправление для этой проблемы. В это время мы могли бы убрать временную работу вокруг #1.

Примечание: после установки временного исправления № 1 у меня больше не возникало проблем. У меня есть это исправление на месте более 12 месяцев, и все хорошо!

Я был поражен этим, есть исправление для него.

http://weblogs.asp.net/scottgu/archive/2007/04/11/public-hotfix-patch-available-for-asp-net-compilation-issues.aspx

Хотя это не происходит с более новыми машинами / установками больше.

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

Другие вопросы по тегам