Не удалось загрузить файл или сборку App_Web_ * с предварительно скомпилированным проектом веб-сайта ASP.NET

Я получаю эту проблему на очень конкретной странице, и я не уверен, как это исправить. Я уже нашел несколько вопросов SO (например, Поврежденная сборка ASP.NET Не удалось загрузить файл или сборку App_Web_* и Не удалось загрузить файл или сборку App_Web_xxxxxxxx или одну из его зависимостей) и пробовали их решения, но безрезультатно.

Подводя итог, вот что я пробовал:

  • Установите batch="false" numRecompilesBeforeAppRestart="50" в файле web.config.

  • Перезапущен веб-сайт IIS, на котором размещен этот веб-сайт.

  • Удалены временные файлы ASP.NET в %windir%\Framework64\v4.0.30319\Temporary ASP.NET Files

  • Переназначен

... и любая комбинация вышеперечисленного, но безрезультатно. Он отлично работает, когда я пытаюсь запустить сайт из VS и когда я развертываю сайт без предварительной компиляции.

Вот некоторые характеристики окружающей среды:

  • Предварительная компиляция выполняется через проект веб-развертывания. Неважно, выполнял ли прекомпиляцию TFS или я: проблема сохраняется

  • Версия .NET — 4.0.30319.

  • Настройки AppPool: конвейерный режим интегрирован в .NET 4.0

Это конкретная ошибка, которая возникает, когда я открываю Customer.aspx:

Could not load file or assembly 'App_Web_qxcfa0wv, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

На этой странице зарегистрирован элемент управления UserManagement.ascx, расположенный по адресу ~/Controls/UserManagement.ascx.

Этот элемент управления зарегистрировал другой элемент управления с именем UserDialog.ascx, расположенный по адресу ~/Controls/Dialogs/UserControl.ascx.

И этот последний элемент управления использует элемент управления ~/Controls/User.ascx, который инкапсулирует данные пользователя. Больше зависимостей нет.

Согласно трассировке стека, ошибка находится в строке 1 UserDialog.ascx (директива <%@ Control ... %>).

Я в растерянности. Я предполагаю, что это не работает, потому что ~/Controls/Dialogs/UserDialog.ascx требует элемента управления, который находится в родительской папке, что приводит к некоторым устаревшим ссылкам во время выполнения. Похоже на описание проблемы в первом вопросе SO.

Однако я не могу проверить это, просто исключив элемент управления ~/Controls/User.ascx, потому что тогда я получаю ошибки циклической ссылки в другом элементе управления, который используется в ~/Control/UserDialog.ascx, хотя этот элемент управления также не регистрирует никаких других элементов управления. Только регистрация пространства имен, которая используется большинством других элементов управления.

Я бы сказал, что циклическая ссылка и ошибка связаны, но я не могу сказать, как именно. Не без рисования всего графика зависимостей.

Любые идеи?

Заранее спасибо!


person user849924    schedule 12.04.2012    source источник
comment
Существуют ли на сервере каталоги ~/Controls/ и/или ~/Controls/Dialogs/?   -  person robertc    schedule 12.04.2012
comment
@robertc: Хм, я не проверял. Судя по всему, папка ~/Controls/ существует, а папки ~/Controls/Dialogs/ нет. Странно, потому что папка ~/Controls/Lists/ действительно существует, но кажется, что единственная причина, по которой она была создана, заключается в том, что она содержит страницу ASPX. В VS2010 папка ~/Controls/Dialogs/ содержит только файлы ASCX, что может объяснить, почему ее нет в сборке...   -  person user849924    schedule 13.04.2012
comment
См. мой аналогичный вопрос - В итоге я создал пустой файл placeholder.html в каждом каталоге, который содержал только файлы ascx, чтобы каталоги создавались на сервере.   -  person robertc    schedule 13.04.2012


Ответы (1)


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

ASP.NET: веб-сайт против Проект веб-приложения

Больше информации в блоге Рика Страла (читайте комментарии):

Понимание наследования страниц в ASP .NET 2.0

person IrishChieftain    schedule 12.04.2012
comment
Спасибо! Я дам вам знать, как это получается. Причина, по которой мы обычно не используем проекты веб-приложений, заключается в том, что в модели веб-сайта есть функция «Редактировать и продолжить», но помимо этого нет никаких реальных причин, по которым мы их не используем. У меня есть некоторые элементы управления в Old_App_Code, которые больше не могут быть найдены, но я все равно хотел их оттуда переместить. - person user849924; 13.04.2012
comment
Это лучший путь; Преимущества шаблона веб-сайта перевешиваются всеми проблемами. - person IrishChieftain; 13.04.2012
comment
Хм, видимо файлы дизайнера повреждаются или не обновляются должным образом. Я выполнил поиск и замену элементов управления по всему сайту, щелкнул правой кнопкой мыши веб-приложение и выполнил преобразование в веб-приложение, и, похоже, с моими файлами дизайнера ничего не произошло. Только когда я коснулся рассматриваемой страницы/элемента управления, он восстановился должным образом. У меня это работает сейчас, но пока не как веб-приложение. - person user849924; 16.04.2012