打包发布
本章你将学会用 SDK 把游戏打包成可执行文件,配置资源加密,并发布到目标平台。
发布流程
1. 打开构建页面
在 SDK 中打开你的项目,点击左侧「构建」页。
2. 配置加密(可选)
灵泛引擎支持即解即用资源加密——发布时按需加密,运行时自动解密,资源保持散文件部署。
| 配置项 | 说明 |
|---|---|
| 资源加密总开关 | 开启后可按文件类型勾选 |
| 文件类型勾选 | 勾选要加密的扩展名(.story / .png / .wav...) |
| 密钥分片数 | 密钥拆分存储的片数(1~8,默认 1) |
加密使用 AES-256-GCM,格式为 LFEN(魔数头 + nonce + tag + 密文)。密钥由 SDK 自动生成并注入到编译产物中。
不加密也行
加密是可选的。开发阶段不需要加密,发布时按需开启。
3. 选择平台
选择目标平台,SDK 会自动查找对应的 .csproj 并执行 dotnet publish:
| 平台后缀 | 目标 |
|---|---|
.Desktop.Windows.csproj | Windows |
.Desktop.Linux.csproj | Linux |
.Desktop.Mac.csproj | macOS |
.Android.csproj | Android |
.iOS.csproj | iOS |
.Browser.csproj | WebAssembly |
4. 点击构建
SDK 执行以下流程:
- 杀掉项目目录下运行的进程(防止 PDB 锁定)
- 生成
GeneratedKeys.cs(加密密钥,放在核心项目Security/目录) dotnet publish平台项目- 原地加密
Stories/和Media/中的指定文件 - 生成
manifest.lfmanifest(清单文件)
构建产物在 bin/Release/<平台>/publish/ 目录下。
手动发布(不用 SDK)
如果不使用 SDK,可以手动执行:
# 1. 生成密钥(如果启用加密)
# 用 SDK_Toolkit 的 KeyInjector 工具生成 GeneratedKeys.cs
# 2. 发布
cd MyNovel/MyNovel.Windows
dotnet publish -c Release -r win-x64
# 3. 加密资源(如果启用)
# 用 SDK_Toolkit 的 AesEncryptor 加密 Stories/ 和 Media/资源部署
发布后的目录结构:
publish/
├── MyNovel.exe # 可执行文件
├── LingFanEngine.dll # 引擎 DLL
├── Stories/ # 剧本(可能已加密)
│ ├── title/
│ └── chapter1/
├── Media/ # 媒体资源(可能已加密)
│ ├── Images/
│ └── Audio/
└── manifest.lfmanifest # 加密清单(如有)散文件部署
灵泛引擎不打包资源。Stories/ 和 Media/ 保持散文件结构,引擎运行时逐个读取并按需解密。这让补丁更新变得简单——只需替换改动的文件。
跨平台注意事项
Windows
dotnet publish -c Release -r win-x64 # x64
dotnet publish -c Release -r win-arm64 # ARM64macOS
dotnet publish -c Release -r osx-arm64 # Apple Silicon
dotnet publish -c Release -r osx-x64 # IntelLinux
dotnet publish -c Release -r linux-x64媒体依赖
音频和视频通过 LingFan.Media 跨平台 AOT 媒体基础设施库提供支持,原生库随 NuGet 包自带,通常零系统依赖。
Android / iOS / Browser
需要使用对应的平台项目 .csproj,SDK 会自动处理依赖。
媒体后端架构
所有媒体能力通过 LingFan.Media 跨平台 AOT 媒体基础设施库统一提供:
| 能力 | 后端 | 说明 |
|---|---|---|
| 音频 | LingFan.Media(miniaudio) | 原生库随 NuGet 包自带,AOT 友好,零系统依赖 |
| 视频 | LingFan.Media(跨平台解码) | 支持 Windows / macOS / Linux / Android / iOS |
引擎定义 IVideoPlayer / IAudioManager 等 seam 接口,LingFan.Media 提供具体实现。替换后端仅需更换适配器,游戏脚本、DSL、上层 API 全部保持不变。
AOT 编译(可选)
灵泛引擎完全 AOT 友好。启用 AOT 可获得更快的启动速度和更低的内存占用:
<PropertyGroup>
<PublishAot>true</PublishAot>
</PropertyGroup>AOT 限制
AOT 编译不支持反射和动态代码生成。灵泛引擎内部已全部避免反射,但你的自定义 C# 代码需注意。
恭喜!
你已经完成了快速入门!现在你可以:
Happy writing! ✨