forked from shadowsocks/shadowsocks-windows
-
Notifications
You must be signed in to change notification settings - Fork 0
ZH Contributing
SlimRG edited this page Aug 23, 2026
·
1 revision
项目目标:.NET 10、WinUI 3、Windows 10 build 19041+、x64 only。Release SDK 通过 global.json 固定。
在 Windows 上执行:
.\packaging\Validate-Repository.ps1
dotnet restore .\shadowsocks-reborn.sln -p:Platform=x64 -r win-x64 -p:NuGetAudit=true -p:NuGetAuditMode=all
dotnet build .\shadowsocks-reborn.sln -c Release -p:Platform=x64 -m:1 --no-restore -p:TreatWarningsAsErrors=true
dotnet test .\Shadowsocks.UnitTests\Shadowsocks.UnitTests.csproj -c Release -p:Platform=x64 --no-build涉及 packaging/storage/update 时还要执行:
.\packaging\Build-Release.ps1- 平台无关逻辑放入
Shadowsocks.Core; - Windows API 放入
Shadowsocks.Windows; - WinUI shell/tray 放入
Shadowsocks.Windows.WinUI或Shadowsocks.WinUI; - 不重新引入 WinForms/WPF;
-
Shadowsocks.NetworkService保持独立 elevated helper; - 用户可选 traffic mode 只有 User/Admin;
- Game Mode 保持自动;
- Local GeoSite/EasyList/ABP 的唯一 authority 是 C#
FilterEngine; - 不恢复
abp.js、compiled-PAC backend 或 executable customabp.txt。
遵循当前 .NET/Microsoft style:
- public API 使用 PascalCase;
- locals/parameters 使用 camelCase;
- private instance field 使用
_camelCase; - 优先
ArgumentNullException.ThrowIfNull、ObjectDisposedException.ThrowIf和具体 exception 类型; - protocol/file/network data 使用 invariant culture;
- async code 不使用
.Result/.Wait()阻塞; - API 支持 cancellation 时继续传递 token;
- disposable ownership 必须明确。
不要为了消除 analyzer warning 使用全局 NoWarn。只有协议兼容性等有明确理由时才允许窄范围 suppression,例如 Shadowsocks EVP_BytesToKey 所需 MD5。
持久化 model 的 C# 名称可以改为 Microsoft-style property,但必须通过 JsonProperty 保留旧 JSON contract。Schema 变化应配套 migration/regression tests。
修改 FilterEngine 时必须保持:
- exception priority;
- user rules 优先于 generated defaults;
- domain anchor/wildcard/options 语义;
- rebuild 失败时保留 last-known-good snapshot;
- User Mode 与 Admin Host/SNI path 行为一致。
Updater、WinDivert、DNSCrypt、plugin extraction/update、startup copy、named pipes、EXE replacement、archive traversal/Windows-ADS 需要额外 review。Background plugin update 仅允许 trusted built-in repository mapping;manual archive 不 auto-update。没有独立 trust/asset-selection contract 时不得加入任意 repository updater。
用户可见行为变化时:
- 同步 EN/RU/ZH root README;
- 同步对应 EN/RU/ZH Wiki;
- 更新 release notes/changelog;
- 新增 UI text 时更新
i18n.csv所有支持语言。