Initial commit: Client Doc docs Server Tools

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ud18010
2026-07-10 10:24:29 +08:00
co-authored by Cursor
commit 7e35d8da31
3374 changed files with 680813 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
using System;
namespace XWorld.PublishTool
{
// PublishTool.Cli 的参数:--mode client|server --src <dir> --out <dir> --spec <json> [--key <pem>]
public sealed class CliOptions
{
public string Mode; // "client" | "server"
public string Src; // 构建产物目录
public string Out; // 落位目录(版本目录本体)
public string SpecPath; // resolved-spec.json
public string KeyPath; // 私钥 pem,可空=不签名
public const string Usage =
"用法: PublishTool.Cli --mode client|server --src <dir> --out <dir> --spec <resolved-spec.json> [--key <private.pem>]";
public static CliOptions Parse(string[] args)
{
var o = new CliOptions();
for (int i = 0; i < args.Length; i += 2)
{
if (i + 1 >= args.Length) throw new ArgumentException($"缺少 {args[i]} 的值\n{Usage}");
string v = args[i + 1];
switch (args[i])
{
case "--mode": o.Mode = v; break;
case "--src": o.Src = v; break;
case "--out": o.Out = v; break;
case "--spec": o.SpecPath = v; break;
case "--key": o.KeyPath = v; break;
default: throw new ArgumentException($"未知参数 {args[i]}\n{Usage}");
}
}
if (o.Mode != "client" && o.Mode != "server")
throw new ArgumentException($"--mode 必须是 client 或 server\n{Usage}");
if (string.IsNullOrEmpty(o.Src) || string.IsNullOrEmpty(o.Out) || string.IsNullOrEmpty(o.SpecPath))
throw new ArgumentException($"--src/--out/--spec 均必填\n{Usage}");
return o;
}
}
}