Я пытаюсь написать модуль/систему плагинов для веб-сайта, над которым я работаю. Общие цели:ASP.Net MVC: как динамически загружать сборки (контроллеры) без перезапуска/повторного использования AppPool
- Чтобы новый сайт не перестраивался при каждом добавлении нового плагина.
- Чтобы иметь возможность выгружать файлы DLL и CSHTML в набор папок, которые в основном добавили бы набор маршрутов, контроллеров и других сборок, от которых зависит модуль (Entity Framework и т. Д.).
- Во избежание маркировки файлов плагинов как «встроенных ресурсов» - особенно видов.
- Чтобы иметь возможность добавлять и удалять эти модули/плагины БЕЗ необходимости перезапускать/перерабатывать пул приложений IIS или выгружать домен приложения.
Я получил # 1-3, работая, следуя примеру Umbraco. В принципе, я пометил метод с атрибутом PreApplicationStartMethod
, и в нем я создаю теневые копии DLL и использую настраиваемый ViewEngine для поиска файлов CSHTML модуля. Когда мой сайт сначала запускается, мои контроллеры и представления моего модуля работают, а сборки загружаются: Ура!
Однако, когда пришло время, чтобы попробовать часть # 4, я получаю эту ошибку при вызове BuildManager.AddReferencedAssembly()
:
Этот метод может быть вызван только во время фазы инициализации предпусковой приложения. Используйте PreApplicationStartMethodAttribute для объявить метод, который будет вызываться в этой фазе
Это было очень расстраивает процесс до сих пор, и моя кишка говорит мне, что эта ошибка означает тупик. Это так, или есть умное обходное решение?
привет, вы нашли какое-либо решение? –