为 XFEToolBox 贡献
感谢你愿意改进 XFEToolBox。本文说明本地开发、测试、提交和文档维护的约定,适用于客户端、服务端、共享核心与工具包规范。
开始之前
- 使用 Windows 与 .NET 10 SDK;涉及 Code Studio 时还需要 Microsoft Edge WebView2 Runtime。
- 先搜索已有 Issue 和 Pull Request,避免重复工作。较大的功能、公共契约变更或界面重构建议先发 Issue 说明目标和方案。
dev是日常开发分支。请从最新的dev创建短生命周期分支,并将 Pull Request 合并目标设为dev。- 不要提交密码、管理密钥、登录令牌、AutoConfig 生成的本地配置、服务端
Data、日志、构建产物或个人 IDE 设置。
本地开发
git clone https://github.com/XFEstudio/XFEToolBox.git
Set-Location .\XFEToolBox
git switch dev
git pull --ff-only
git switch -c feature/short-topic
dotnet restore .\XFEToolBox.sln
dotnet build .\XFEToolBox.sln
常用启动命令:
# WPF 客户端
dotnet run --project .\XFEToolBox\XFEToolBox.Client.csproj
# 服务端
dotnet run --project .\XFEToolBox.Server\XFEToolBox.Server.csproj
服务端首次运行会创建管理员 admin,默认密码为 ChangeMe_123!。该账号仅用于本地初始化,首次登录后应立即修改密码。若要让客户端连接本地服务,需要同步调整 ClientSession.ApiAddress;请勿把个人环境地址意外提交到 Pull Request。
代码约定
- 遵循现有 C# 风格:启用 Nullable 与 Implicit Usings,优先使用文件范围命名空间、清晰的类型名和早返回。
- 异步 I/O 使用
async/await并以Async结尾;可传播的调用应继续传递CancellationToken。 - 公共契约放在
XFEToolBox.Core,客户端专用的非 UI 能力放在XFEToolBox.Client.Core,服务端存储与校验放在XFEToolBox.Server.Core。 - WPF 页面保持 View、ViewModel 和业务服务边界清晰。客户端与安装器共用的控件、行为、主题或窗口适配应放入
XFEToolBox.WpfCore;新增样式前先复用现有 ResourceDictionary、控件和主题资源。 - 用户可见文字应明确、可操作;同一功能内保持中英文术语一致。
- 文件、ZIP、下载地址和用户输入必须在信任边界处校验。不要降低路径穿越、符号链接、文件数量、解压大小、压缩率或 SHA-256 校验等安全限制。
- 不要静默吞掉会影响数据、登录、下载或发布结果的异常;应记录或向用户显示有意义的信息。
- 保持修改聚焦,避免把无关格式化、资源重排或生成文件混入同一提交。
工具包与服务端变更
修改 .xfetool 清单、目录契约或接口时,需要同时检查以下位置:
XFEToolBox.Core中的共享模型与客户端契约;XFEToolBox.Server.Core中的校验和存储;XFEToolBox.Server中的公开及管理接口;- WPF 客户端中的 Code Studio、下载、缓存和运行流程;
docs/tool-packages.md或docs/software-catalog.md中的示例与限制。
破坏兼容性的工具包变更应提升 packageFormatVersion,并明确旧版本的迁移或拒绝策略。新增管理员能力时,应继续校验登录态和管理员角色;遗留的 API Key 接口不得暴露到不受信网络。
测试与验证
提交前至少构建整个解决方案,并运行与修改范围相关的测试:
dotnet build .\XFEToolBox.sln --configuration Release
dotnet run --project .\XFEToolBox.Test\XFEToolBox.Client.Test.csproj --configuration Release -- --benchmarks --quick
dotnet run --project .\XFEToolBox.Server.Test\XFEToolBox.Server.Test.csproj --configuration Release
dotnet run --project .\XFEToolBox.Client.Wpf.Test\XFEToolBox.Client.Wpf.Test.csproj --configuration Release -- --benchmarks --quick
客户端与 WPF 验证当前使用兼容期内的 SMTest 基准标记;缺少 --benchmarks 时运行器会发现 0 项。新增代码应使用当前测试框架的 Test/TestCase 或 Benchmark,不要继续增加 SMTest。
涉及 WPF 的改动还应手动检查窗口缩放、DPI、滚动、键盘操作、空数据、错误状态和主题资源;涉及服务端的改动应检查未登录、普通用户、管理员、非法输入和大小边界。
若某项测试受环境限制无法运行,请在 Pull Request 中写明未运行的命令、原因和已完成的替代验证。
提交和 Pull Request
提交信息使用简短、具体的中文或英文,说明实际结果,例如 修复工具包路径校验。一个提交尽量只表达一个逻辑变更。
Pull Request 应包含:
- 变更目的和用户可见效果;
- 关键实现与兼容性、安全性说明;
- 实际运行过的构建、测试和手动验证;
- UI 变更前后的截图或录屏;
- 关联的 Issue,以及仍待处理的限制。
提交前检查:
- 修改范围聚焦,未覆盖他人的无关改动。
- 未包含密钥、令牌、本地配置、运行数据或生成产物。
- Debug/Release 构建和相关测试通过,或已说明限制。
- 新行为有测试覆盖,边界和失败路径已验证。
- 公共接口、配置、工具包格式或用户流程变化已同步更新文档。
- UI 变更已进行人工视觉检查。
报告安全问题
发现认证绕过、任意文件访问、危险工具包执行或敏感信息泄露时,请不要在公开 Issue 中披露利用细节。应通过仓库维护者提供的私密联系方式报告,并附上影响范围、复现条件和建议修复方向。