Мы разрабатываем веб-приложение, которое позволяет администраторам загружать подключаемые модули. Все плагины хранятся в специальной папке вне корня приложения (скажем, C: \ Plugins) и динамически загружаются через Assembly.LoadFrom (). По большей части это работает просто отлично: экземпляры WebControls в плагинах создаются и загружаются, пользовательские классы работают как положено и т. Д.
Мы используем пользовательский VirtualPathProvider для извлечения ресурсов из этих плагинов. Таким образом, чтобы получить встроенный файл ASPX, вам просто нужно сделать следующее: «/MySite/embeddedResource/?Assembly=MyPlugin&Resource=MyPage.aspx». И это тоже хорошо работает: встроенный файл ASPX компилируется и обрабатывается как обычная страница.
Проблема, однако, возникает, когда внедренный файл .aspx (внутри динамически загружаемого плагина) ссылается на класс внутри той же сборки плагина. Мы получаем ошибки компиляции, такие как «не удается найти тип или сборку MyPlugin». Это странно, потому что, очевидно, он вытаскивает файл .aspx из MyPlugin; так как он не может его найти?
Итак, я надеюсь, что вы поможете мне с этим. Плагин будет выглядеть так:
MyPlugin.dll:
- InternalHelperClass.cs
- MyPage.aspx (ресурс без файла .cs)
Когда MyPage.aspx содержит что-то вроде «<% = InternalHelperClass.WriteHelloWorld ()%>», компиляция завершается неудачно.
Как мы можем заставить это работать?
UPDATE:
Мы попытались использовать полные имена. Нет разницы.
Невозможно пройти - это ошибка компиляции при переходе на страницу aspx.
Пространства имен не будут проблемой в этом случае (так как это было от внешнего плагина dll)
UPDATE2:
Джоэл, я думаю, что вы на что-то. К сожалению, редактирование web.config для включения этих сборок не является частью дизайна. По сути, мы хотим, чтобы плагины были полностью динамическими - поместите их в папку, перезапустите приложение и будьте готовы к работе.