Этот действительно меня бесит. Здесь идет:
Моя цель - загружать сборки во время выполнения, которые содержат встроенные aspx, ascx и т. Д. Я также хотел бы не блокировать файл сборки на диске, чтобы я мог обновлять его во время выполнения без перезапуска приложения. (Я знаю, что предыдущая версия будет загружена).
С этой целью я написал провайдера виртуального пути, который добился цели. Я подписался на событие CurrentDomain.AssemblyResolve, чтобы перенаправить каркас на мои сборки.
Проблема в том, что когда платформа пытается скомпилировать динамическую сборку для страницы aspx, я получаю следующее:
Сообщение об ошибке компилятора: CS0400: не удалось найти тип или имя пространства имен 'Pages' в глобальном пространстве имен (отсутствует ссылка на сборку?)
Ошибка источника:
открытый класс app_resource_pages__version_1_0_0_0__culture_neutral__publickeytoken_null_default_aspx: global :: Pages._Default, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandle
Я заметил, что если я загружаю сборку с помощью Assembly.Load (AssemblyName) или Assembly.LoadFrom (имя файла), я не получаю вышеуказанную ошибку. Если я загружаю его с помощью Assembly.Load (byte []) (чтобы не блокировать его), генерируется исключение, но мой обработчик AssemblyResolve при вызове возвращает сборку правильно (она вызывается один раз).
Так что я предполагаю, что он вызывается один раз, когда каркас анализирует разметку asp, но не когда он пытается создать динамическую сборку для страницы aspx.