Files
oniagent/ONIModTutorial/ONIModTutorial-main/version-compatibility.md
2026-05-30 11:00:36 +08:00

65 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔄 多版本兼容性与发布管理
为了确保 Mod 能够在不同版本的《缺氧》如本体、DLC、测试版中正常运行你需要正确配置 `mod_info.yaml``archived_versions` 文件夹。
---
## 一 . 核心配置文件mod_info.yaml
> [!IMPORTANT]
> **官方原文链接:** [Setting up mod_info.yaml and archived_versions](https://forums.kleientertainment.com/forums/topic/158363-setting-up-mod_infoyaml-and-archived_versions/)
每个发布到 Steam Workshop 的 Mod 根目录必须包含 `mod_info.yaml`。它决定了 Mod 的“准入资格”。
::: code-group
```yaml [mod_info.yaml 模板]
supportedContent: ALL # 支持范围VANILLA_ID, EXPANSION1_ID, 或 ALL
minimumSupportedBuild: 512719 # 运行该 Mod 所需的最低游戏版本号
version: "1.0.0" # 你自己的 Mod 版本号
```
:::
## 二 . 文件夹结构archived_versions
当你需要同时兼容当前稳定版和之前的旧版本时,不能只靠一个 .dll。你需要使用文件夹分层。
📂 推荐目录结构
::: details 点击查看结构树
```yaml
MyMod/
├── mod_info.yaml # 最新版的信息(通常指向当前正式版)
├── mod.yaml # 最新版的基本描述(通常指向当前正式版)
├── MyMod.dll # 适用于当前最新正式版的代码
└── archived_versions/ # 存档版本文件夹
└── 512719/ # 文件夹名 = 适用的最低游戏版本号
├── mod_info.yaml # 该版本的独立信息
├── mod.yaml # 该版本的基本描述
└── MyMod.dll # 该版本的专用代码
```
:::
⚙️ 运行逻辑说明
* **扫描阶段:** 游戏启动时会优先扫描 `archived_versions` 文件夹。
* **匹配阶段:** 它会寻找文件夹名(版本号)小于或等于当前游戏版本,且最接近当前版本的文件夹。
* **回退阶段:** 如果没有匹配的归档文件夹,则运行根目录下的默认文件。
## 三 . 兼容性开发建议
::: tip 🛡️ 为什么使用这种结构?
* **版本隔离(防止“炸档”):** 当游戏大版本更新导致 API 变更时,旧版本用户会自动定向到 `archived_versions` 运行,确保插件不会因环境冲突而崩溃。
* **双轨并行(分支维护):** 支持同时为 **测试版 (Testing Branch)** 和 **正式版 (Live Branch)** 维护两套完全独立的 DLL 逻辑,互不干扰。
:::
### 🛠️ 自动化生成事件
在 Visual Studio 的项目属性中添加 **生成事件 (Post-build event)**,可实现编译后自动归档到对应文件夹:
```batch
# 如果是 Release 配置,自动拷贝到 512719 归档目录
if "$(ConfigurationName)" == "Release" (
xcopy /Y "$(TargetDir)$(TargetFileName)" "$(ProjectDir)archived_versions\512719\"
)
```