Skip to main content
Lampac NextGen использует Roslyn (CSharpEval) для динамической компиляции C#-модулей при запуске. Все .cs-файлы из каталогов module/ и mods/ компилируются в памяти и подключаются как полноценные сборки ASP.NET Core. Готовые .dll из references/ подключаются напрямую без компиляции.

Порядок загрузки

1

mods/ — пользовательские модули

Сначала обрабатывается каталог mods/. Здесь размещаются сторонние модули, добавленные вручную.
2

module/ — встроенные модули

Затем обрабатывается module/ со встроенными модулями, скопированными из репозитория при сборке.
3

references/ — готовые DLL

Из подкаталогов references/ подгружаются готовые .dll как части MVC-приложения без компиляции.
4

manifest.json — Roslyn-компиляция

Папки с manifest.json на любой вложенности при необходимости компилируются Roslyn. Фильтрация по SkipModules, LoadModules и флагу enable в манифесте.
5

IModuleConfigure.Configure

После компиляции для каждого модуля вызывается Configure — регистрация контроллеров, сервисов и middleware в DI.
6

IModuleLoaded.Loaded

После старта приложения вызывается Loaded — инициализация фоновых задач, подписка на события.
7

dynamic: true — горячая пересборка

Модули с "dynamic": true в манифесте автоматически пересобираются при изменении .cs-файлов (WatchersDynamicModule).

Как фильтры применяются вместе

Состояние модулей

Не существует одного универсального «состояния по умолчанию». config/base.conf, starter-файл config/example.init.conf и manifest.json применяются вместе.

Разрешены base-конфигурацией

Исключены config/base.conf

Дополнительно исключены starter-конфигурацией

config/example.init.conf добавляет к исключениям:

Выключены через manifest.json

Среди модулей с "enable": false: AdminPanel, DatabaseEditor, ExternalBind, Music, Telemetry, Tg-notify.bot, Tracks, Transcoding, WatchTogether, TelegramAuth, TelegramAuthBot и LogUserRequest-Lite. Полный актуальный каталог: модули Lampac.

manifest.json

Каждый Roslyn-модуль содержит manifest.json в своей папке:

LoadModules и SkipModules

Оба параметра принимают одинаковые паттерны:
LoadModules применяется после SkipModules. Если модуль указан в SkipModules и одновременно подпадает под LoadModules — он не загружается.

Соглашения для пользовательских модулей

Подробный гайд по написанию собственных модулей — в разделе Кастомные модули. Минимальные требования:
  • Публичный класс ModInit с реализацией IModuleLoaded
  • manifest.json с "enable": true в папке модуля
  • Конфиг через ModuleInvoke.Init("ИмяМодуля", …) + подписка на EventListener.UpdateInitFile
  • Контроллеры Online/SISI наследуют от BaseOnlineController / BaseSisiController
Модули Catalog, DLNA, Tracks, Transcoding, GStreamer и NextHUB не экранируют входящие запросы от сети. Включайте их только в доверенных окружениях или за WAF/firewall.
Last modified on September 2, 2026