Проблема
В ASP.NET чаще всего необходимо заново компилировать весь проект и перезагружать сервер, что бы изменения пришли в силу. В больших проектах это может занимать минуты и даже часы.
Задача
Создать систему, которая минимизирует время простоя сервера и позволяет вносить изменения в функционалал без перезапуска.
Что реализовано
- Загрузка модулей в изолированных
AssemblyLoadContext. - Горячая перезагрузка DLL и общих зависимостей.
- Маршрутизация, CORS-политики, сессии, события и обмен сообщениями между модулями.
- Встроенный Razor-движок и Server-Sent Events.
- Общие зависимости: одна генерация сборки на DLL, используемая всеми модулями; автоматическая перезагрузка при изменении.
- Система событий и сообщений: модули могут подписываться на события (загрузка/выгрузка, запросы) и обмениваться данными через
ModuleMessage. - Встроенный логгер с цветной индикацией уровней и хранилище (LiteDB) для сессий и пользовательских данных модулей.