Не удалось загрузить файл или сборку 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

  • Reployed

... и любая комбинация вышеперечисленного, но безрезультатно. Он прекрасно работает, когда я пытаюсь запустить сайт из 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 (The <%@ Control ... %> Директива).

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

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

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

Есть идеи?

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

1 ответ

Решение

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

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

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

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

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