Skip to content

打包发布 ​

本章你将学会用 SDK 把游戏打包成可执行文件,配置资源加密,并发布到目标平台。

发布流程 ​

1. 打开构建页面 ​

在 SDK 中打开你的项目,点击左侧「构建」页。

2. 配置加密(可选) ​

灵泛引擎支持即解即用资源加密——发布时按需加密,运行时自动解密,资源保持散文件部署。

配置项说明
资源加密总开关开启后可按文件类型勾选
文件类型勾选勾选要加密的扩展名(.story / .png / .wav...)
密钥分片数密钥拆分存储的片数(1~8,默认 1)

加密使用 AES-256-GCM,格式为 LFEN(魔数头 + nonce + tag + 密文)。密钥由 SDK 自动生成并注入到编译产物中。

不加密也行

加密是可选的。开发阶段不需要加密,发布时按需开启。

3. 选择平台 ​

选择目标平台,SDK 会自动查找对应的 .csproj 并执行 dotnet publish:

平台后缀目标
.Desktop.Windows.csprojWindows
.Desktop.Linux.csprojLinux
.Desktop.Mac.csprojmacOS
.Android.csprojAndroid
.iOS.csprojiOS
.Browser.csprojWebAssembly

4. 点击构建 ​

SDK 执行以下流程:

  1. 杀掉项目目录下运行的进程(防止 PDB 锁定)
  2. 生成 GeneratedKeys.cs(加密密钥,放在核心项目 Security/ 目录)
  3. dotnet publish 平台项目
  4. 原地加密 Stories/ 和 Media/ 中的指定文件
  5. 生成 manifest.lfmanifest(清单文件)

构建产物在 bin/Release/<平台>/publish/ 目录下。

手动发布(不用 SDK) ​

如果不使用 SDK,可以手动执行:

bash
# 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 ​

bash
dotnet publish -c Release -r win-x64        # x64
dotnet publish -c Release -r win-arm64      # ARM64

macOS ​

bash
dotnet publish -c Release -r osx-arm64      # Apple Silicon
dotnet publish -c Release -r osx-x64        # Intel

Linux ​

bash
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 可获得更快的启动速度和更低的内存占用:

xml
<PropertyGroup>
  <PublishAot>true</PublishAot>
</PropertyGroup>

AOT 限制

AOT 编译不支持反射和动态代码生成。灵泛引擎内部已全部避免反射,但你的自定义 C# 代码需注意。

恭喜! ​

你已经完成了快速入门!现在你可以:

Happy writing! ✨

基于 .NET 10 + Avalonia 12 · Apache-2.0 License