# CDN 根目录 内网 / 线上资源分发根。由独立静态文件服务 `Server/Cdn.Runner` 提供: ```bash dotnet run --project Server/Cdn.Runner -- --root <仓库>/CDN --port 15081 --lan ``` 客户端通过 DevDiscovery 拿到 **CDN 根地址**(`http://:15081/`,存入 `GlobalData.CurCDN`), 再从根派生下面两套子树。两套都是根下的兄弟目录。 ``` CDN/ ├─ XWorld/ # ① 旧全量热更链路(大厅 / 基础客户端资源) │ ├─ pc/ # 按平台分目录(pc / android / ios) │ │ ├─ updatever.txt # 版本号:dllmd5,filelistmd5 │ │ ├─ files_.txt # 资源清单(md5 命名) │ │ └─ <资源>_.unity3d # AB(md5 命名,含 StreamingAssets_.unity3d) │ ├─ android/ │ └─ ios/ └─ minigame/ # ② 小游戏资源 └─ /// # 每个小游戏每个版本每个平台一目录(platform=pc/android/ios/webgl) ├─ game.json ├─ files.txt ├─ files.txt.sig ├─ code_.unity3d └─ res_.unity3d ``` ## 各链路取值 | 链路 | 消费方 | 取值 | |---|---|---| | ① 旧全量热更(大厅) | `UpdateModule.UpdateResAll`(`Update.cs`);运行时 AB 由 `XResLoader`(`coLoadXIDAB/coLoadXIDFile("XWorld",…)`) | `AppConst.UpdateServer = XWorld/`,再 `+/` ⇒ `<根>/XWorld//…`;`XResLoader` 用 `m_dicXidCDN["XWorld"]=` + 路径 `XWorld//…` | | ② 小游戏 | `MiniGameDownloader`(`CSharpClientApp.ResolvedCdnBase`) | `` 末尾补 `minigame/`,再 `+///` ⇒ `<根>/minigame////…` | ## 来源(怎么把产物放进来) - **XWorld/**:基础客户端/大厅的打包产物(`updatever.txt` + `files_.txt` + AB),按平台放进 `XWorld//`。 - **minigame/**:Unity 菜单「XWorld/生成小游戏更新」直接产出到 `minigame////`(客户端 AB + game.json/files.txt/files.txt.sig)。 > 说明:本目录下除 `.gitkeep` 占位外为发布产物,通常不纳入版本库(按需)。