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

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

В моем случае это происходит на производственном сервере. Я получаю ту же ошибку, которая была описана в других вопросах, и решаю ее путем повторного копирования сборок в каталог 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 ]

8 голосов
/ 09 августа 2009

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

Проблема:

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

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

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

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

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

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

Подробнее см. KB Артикул 934839

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

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

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

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

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

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

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

3 голосов
/ 24 апреля 2009

Я получил это, есть исправление для него.

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

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

0 голосов
/ 17 августа 2016

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

...