Сборка движка с C#: glue, API и SDK
Текущие требования .NET, порядок генерации, состав комплекта и ошибки проверки.
C# комплект состоит из нативного редактора/шаблонов с включённой интеграцией, сгенерированных привязок, managed API, инструментов и SDK-пакетов. Успешная сборка одного EXE не подтверждает готовность всего комплекта.
Текущие требования
В Source/modules/mono/global.json запрошен .NET SDK 10.0.100 с rollForward=latestMajor. ReckfellSharp, ReckfellSharpEditor и инструменты редактора нацелены на net10.0. Старого требования «.NET SDK 8+» для этого дерева недостаточно. Проверяйте фактически выбранный SDK из каталога managed-проектов, где применяется global.json.
dotnet --info
python modules/mono/build_scripts/build_assemblies.py --helpВторую команду выполняйте из Source. SDK нужен для сборки; состав runtime у поставляемого редактора/игры проверяется отдельно. Имя mono в параметрах и путях — имя текущего модуля, его не нужно самостоятельно переименовывать в dotnet.
Порядок действий
- Соберите нативный editor с module_mono_enabled=yes и нужной архитектурой/precision. Для экспорта нужны соответствующие template_debug/template_release с тем же модулем.
- Тем же редактором сгенерируйте C# API из его ClassDB. Делайте это из каталога без запуска игрового проекта. Генерация создаёт исходники; она не собирает DLL managed API.
- Проверьте журнал генерации и полученные файлы. При изменении зарегистрированных типов, методов или параметров старые привязки нельзя считать актуальными только по номеру продукта.
- Запустите build_assemblies.py для managed решений и проверьте результаты. Согласуйте precision и deprecated с нативной конфигурацией.
- Подготовьте целый комплект редактора/экспорта и проверьте открытие проекта, сборку C#, выполнение и экспорт.
Для уже настроенного Windows x64 окружения последовательность выглядит так; имя editor замените фактическим именем своего результата:
python -m SCons platform=windows target=editor arch=x86_64 module_mono_enabled=yes
$editor = "./bin/reckfell.windows.editor.x86_64.mono.console.exe"
& $editor --headless --generate-mono-glue modules/mono/glue
python modules/mono/build_scripts/build_assemblies.py --reckfell-output-dir bin --reckfell-platform windows --werrorЭти полные команды сборки здесь не выполнялись. При диагностике генерации использован установленный редактор и отдельный выход QA; рабочие файлы Source и установленный SDK не заменялись.
Ожидаемые артефакты
Генератор пишет C# API под ReckfellSharp/ReckfellSharp/Generated и ReckfellSharp/ReckfellSharpEditor/Generated относительно заданного каталога glue. Для обычной сборки пути привязаны к modules/mono/glue.
build_assemblies.py собирает managed решения и копирует API, XML/PDB и вспомогательные файлы в ReckfellSharp/Api/Debug и Release внутри reckfell-output-dir. Инструменты и NuGet-пакеты формируются соответствующими MSBuild-проектами/targets. Не считайте произвольный выходной каталог автоматически готовым переносимым дистрибутивом.
Для редактора нужны подходящие API и инструменты рядом с нативным бинарником; при распространении сохраняйте требуемые файлы runtime и зависимости. Поставка C# игры проверяется отдельно от запуска на машине с установленным SDK.
Параметры build_assemblies.py
| Параметр | Назначение |
|---|---|
| --reckfell-output-dir | Обязательный каталог выходных данных API |
| --reckfell-platform | Платформенная настройка managed инструментов; не выполняет кросс-компиляцию нативного движка |
| --precision=double | Согласование с нативным precision=double; по умолчанию single |
| --no-deprecated | Согласование с нативным deprecated=no |
| --dev-debug | Debug-конфигурация инструментов; API собирается по собственной последовательности Debug/Release |
| --push-nupkgs-local | Копирование пакетов в локальный источник; также включает очистку кеша соответствующих версий через targets |
| --werror | Требование считать предупреждения компиляции ошибками в поддерживаемых этапах |
Не меняйте версию продукта 1.0.0 ради обхода NuGet-кеша и не удаляйте весь общий кеш как обязательный шаг. Разделяйте наборы пакетов разных сборок: фиксируйте источник, версии и хеши; при необходимости используйте отдельный NUGET_PACKAGES для рабочей среды. Локальный источник настраивается через NuGet.Config. Пакеты одного номера из разных сборок могут иметь разное содержимое.
Реально обнаруженные ошибки генерации
Проверенный вызов из каталога без игрового проекта создал 1187 файлов C#, напечатал сообщение об успешной генерации и вернул код 0. При этом журнал содержит 24 ERROR и 174 WARNING. Среди них неразрешённые ссылки на члены во встроенной XML-документации и ссылки Core-описаний на редакторские типы.
Этот запуск зафиксирован как неуспешная генерация, а не исправный SDK. Файлы остались в QA и не были установлены. Сверяйте журнал, наличие ожидаемых файлов, компиляцию managed API и выполнение проекта; код 0 и сообщение «successfully generated» сами по себе недостаточны. В текущем обработчике CLI выход с 0 возможен после сообщений об ошибках.
Генератор также сохраняет скрытые служебные обёртки, включая известные заглушки ReckfellExtension. Наличие объявления метода в C# не подтверждает его функциональность: см. API ресурса расширения.
Диагностика
| Симптом | Что проверить |
|---|---|
| SDK/target framework не найден | Выбранный dotnet, global.json и net10.0 |
| Native editor не понимает флаг glue | Правильный бинарник, включённый mono и поддерживаемый режим генерации |
| Генератор создал файлы с ERROR в журнале | Не принимать комплект; выяснить конкретные ссылки/типы и проверить сборку API |
| API mismatch при запуске | Согласованность нативного API, glue, managed DLL, precision и deprecated |
| Restore использует старый пакет | Источники NuGet, конкретная версия, кеш выбранной среды и хеш пакета |
| Работает только на машине разработчика | Полнота поставки runtime, инструментов и экспортного комплекта |
В этой проверке выполнялись --help, dotnet --info и изолированная генерация glue. Нативный движок, managed решения движка, пакеты и экспортная игра заново не собирались.
Далее: общая конфигурация SCons, сборка Windows.