快速开始
Watt Toolkit(原名 Steam++)是一个开源、跨平台的多功能游戏工具箱,基于 .NET / C# 构建,支持 Windows、Linux、macOS 与 Android 等多端运行。本页是整个 Wiki 的入口页面,帮助新用户完成「下载安装 → 首次运行」以及新开发者完成「环境准备 → 获取源码 → 本地构建」两条路径的上手流程。
Purpose and Scope
本页覆盖以下内容:
- 终端用户路径:了解 Watt Toolkit 的功能定位、支持的操作系统、下载渠道与安装产物(msix / deb / rpm / pkg / apk 等)。
- 开发者路径:准备开发环境(IDE、.NET SDK 版本约束)、克隆仓库、理解解决方案(solution)分层结构,并完成本地构建与调试。
- 仓库导览:
src/下各目录的职责划分(Common、Lib、Tool、Launch 四大块),以及构建脚本与目标框架(TFM)的组织方式。
以下内容有意留给兄弟页面,本页只做指路不做展开:
- 各业务功能(网络加速、账号切换、库存游戏、本地令牌、游戏工具)的内部实现,见对应的功能专题页。
- 客户端启动流程、DI 注册与 MVVM 架构细节,见架构相关页面。
- 发布产物在各操作系统上的文件目录结构,见
doc/program-file-structure/下文档与发布专题页。
Overview
Watt Toolkit 的大部分功能依赖本机安装的 Steam 客户端,核心能力包括(摘自仓库 README):
| 功能 | 支持平台 | 说明 |
|---|---|---|
| 网络加速 | Windows / Linux / macOS / Android | 基于 YARP.ReverseProxy 进行本地反向代理,加速访问游戏网站;并可拦截网络请求向网页注入 JS 脚本 |
| 账号切换 | Windows / Linux / macOS | 快速切换当前 PC 上登录过的 Steam、Epic、Uplay 等多平台账号,管理 Steam 家庭共享库 |
| 库存游戏 | Windows / Linux / macOS | 管理 Steam 游戏库存、自定义封面、下载完成定时关机、模拟运行挂时长、云存档管理、成就解锁 |
| 本地令牌 | Windows / Linux / macOS / Android | 统一管理 HOTP / TOTP / Steam / Google 令牌,支持 Steam 批量确认交易 |
| 游戏工具 | Windows | 强制游戏窗口无边框化等 |
README 中明确:全新的 3.0 版本引入自定义插件功能,上述功能均为下载时自带的默认插件,用户可自行删除或禁用——这是 3.x 架构与旧版最大的差异,也是理解源码分层的出发点。
支持的操作系统(来自 README 的运行要求):
- Windows 11 / Windows 10 版本 1809(内部版本 17763)或更高
- macOS 10.15 或更高
- Ubuntu 20.04+、Debian 11+、Fedora 37+、Deepin(UOS) 20+
- Android 5.0(API 21)或更高(iOS 支持开发中)
对应的构建侧最低平台版本(来自 src/TFM_NETX_WITH_WINDOWS.props):SupportedOSPlatformVersion 中 Windows 为 10.0.17763.0,macOS 为 12.0,Android 为 24.0,iOS/MacCatalyst 为 15.0,Tizen 为 6.5。
Architecture
从仓库根目录与 src/README.md 可以看出,解决方案采用「平台无关核心 + 平台适配层 + UI 框架层 + 启动项」的经典跨平台分层:
分层要点与设计意图:
- Launch(启动项)按发布形态拆分:桌面主程序、MSIX 单项目打包、Desktop Bridge 打包、MAUI 客户端、Android 客户端各自独立成项目,保证每条发布管线只携带所需依赖。
FDELauncher是一个仅用 .NET FX 3.5 编写的启动器,用于在用户未安装 .NET 运行时时给出提示(框架依赖发布场景)。 - Platforms 是平台差异的唯一落点:Windows/macOS/Linux/Android/iOS 的原生能力(互操作、注册表、钥匙串等)分别封装在
ST.Client.*平台项目中,上层通过抽象接口调用,避免平台代码渗入业务层。 - Common 是最底层地基:
Common.CoreLib为全局通用库,Common.ClientLib及其平台变体面向客户端,Repositories.sqlite-net-pcl提供本地 SQLite 持久化。拼音库按平台选择不同实现(iOS 用CFStringTransform,Android 用 TinyPinyin),体现「同一抽象、多实现」的思路。 - MVVM 目录约定:
src/README.md的命名空间约定中,Application/UI/ViewModels、Application/UI/Views、Application/Services与Application/Services/Implementation明确了「服务接口与实现分离」的组织方式,DI 注册统一放在ServiceCollectionExtensions.cs,且命名空间统一挂到Microsoft.Extensions.DependencyInjection,使调用侧无需额外 using。
下载与安装
官方下载渠道
README 列出的分发渠道:
- Steam 商店:https://store.steampowered.com/app/2425030
- Microsoft 应用商店:https://apps.microsoft.com/store/detail/watt-toolkit/9MTCFHS560NG
- 软件官网:https://steampp.net
- GitHub 发行版:https://github.com/BeyondDimension/SteamTools/releases
- 码云发行版:https://gitee.com/rmbgame/SteamTools/releases
- Arch 用户仓库:
watt-toolkit-bin(Release 构建)与watt-toolkit-git(源码构建,可能失败)
详细的下载指引由 doc/download-guide.md 提供(README 中的「下载指南」章节直接指向该文件)。
各平台安装产物
doc/publish.md 明确了发布资产的命名规范(以 Steam++_vx.y.z_... 命名):
| 平台 | 架构 | 产物 |
|---|---|---|
| Windows | x64 / x86 / Arm64 | .msix(商店式安装)与 .7z(解压即用) |
| Linux | x64 / Arm64 | .tar.zst、.deb、.rpm |
| macOS | x64 / Arm64 | .pkg |
| Android | Arm64 | .apk |
1- Windows
2 - x64
3 - Steam++_vx.y.z_win_x64.msix
4 - Steam++_vx.y.z_win_x64.7z
5 - x86
6 - Steam++_vx.y.z_win_x86.msix
7 - Steam++_vx.y.z_win_x86.7z
8 - Arm64
9 - Steam++_vx.y.z_win_arm64.msix
10 - Steam++_vx.y.z_win_arm64.7z
11- Linux
12 - x64
13 - Steam++_vx.y.z_linux_x64.tar.zst
14 - Steam++_vx.y.z_linux_x64.deb
15 - Steam++_vx.y.z_linux_x64.rpm
16 - Arm64
17 - Steam++_vx.y.z_linux_arm64.tar.zst
18 - Steam++_vx.y.z_linux_arm64.deb
19 - Steam++_vx.y.z_linux_arm64.rpm
20- macOS
21 - x64
22 - Steam++_vx.y.z_macos_x64.pkg
23 - Arm64
24 - Steam++_vx.y.z_macos_arm64.pkg
25- Android
26 - Arm64
27 - Steam++_vx.y.z_android_arm64.apk设计意图说明:
- Windows 同时提供
.msix与.7z两种形态:.msix走系统级安装(对应源码中的ST.Client.Avalonia.App.MsixPackage与 Desktop Bridge 打包项目),.7z面向绿色便携用户。 - Linux 覆盖
.deb/.rpm/.tar.zst,分别适配 Debian 系、RHEL 系与手动解压用户。 - macOS 的
.pkg与源码中的packaging/脚本(如build-osx-app.sh、Info.plist)配合完成打包。
开发环境搭建(开发者快速开始)
推荐工具链
README「开发环境」章节列出的官方工具链:
- Visual Studio 2026
- JetBrains Rider
- Visual Studio Code
- OpenJDK 17
- Android Studio Electric Eel 或更高版本
- Xcode 26 或更高版本
选型意图:桌面端(Avalonia)用 VS/Rider/VSCode 均可;OpenJDK 与 Android Studio 是构建 ST.Client.Android.App(Xamarin.Android)与 net*-android 目标框架的硬性依赖;Xcode 仅在 macOS 上构建 iOS/macOS 目标时需要。
.NET SDK 版本约束
仓库根目录的 global.json 通过 sdk.rollForward 策略控制 SDK 版本:
1{
2 "sdk": {
3 "version": "11.0.0",
4 "rollForward": "latestMajor",
5 "allowPrerelease": true
6 }
7}来源:global.json
三个字段的含义与影响:
version: "11.0.0":声明的基准 SDK 版本。rollForward: "latestMajor":本机 SDK 主版本大于等于 11 均可参与构建,避免贡献者因小版本差异被阻塞。allowPrerelease: true:允许使用预览版 SDK,说明仓库跟随 .NET 最新版本演进(README 徽章同时声明了 .NET 7.0 / C# 11 的历史版本信息)。
目标框架(TFM)组织
多平台目标不写在每个 csproj 里,而是通过仓库级 props 文件统一注入。src/TFM_NETX_WITH_ALL.props 展示了按构建主机操作系统裁剪 TargetFrameworks 的做法:
1<PropertyGroup>
2 <TargetFrameworks>net$(DotNet_Version)</TargetFrameworks>
3 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net$(DotNet_Version)-macos;net$(DotNet_Version)-windows10.0.19041.0</TargetFrameworks>
4 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('osx'))">$(TargetFrameworks);net$(DotNet_Version)-ios;net$(DotNet_Version)-macos;net$(DotNet_Version)-maccatalyst</TargetFrameworks>
5 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('linux'))">$(TargetFrameworks)</TargetFrameworks>
6</PropertyGroup>设计意图:
- 版本号集中在
$(DotNet_Version)变量,升级 .NET 时只改一处,全部项目随之变化。 - 按宿主 OS 条件化 TargetFrameworks:Windows 上可额外构建 macos/windows TFM(交叉编译),macOS 上可构建 Apple 全家桶,Linux 只构建基础 TFM——避免在错误平台上触发注定失败的 iOS/Android 工具链。
- 仓库同时提供
TFM_NETX_WITH_WINDOWS.props(仅追加 Windows TFM)与TFM_NETX_WITH_ALL.props(追加 macos/windows 等)两个梯度,供不同项目选择裁剪粒度。
最低平台版本矩阵
src/TFM_NETX_WITH_WINDOWS.props 中的 SupportedOSPlatformVersion 定义了各平台可下探的最低版本:
| 平台标识 | SupportedOSPlatformVersion | 与 README 运行要求对照 |
|---|---|---|
| windows | 10.0.17763.0(=1809) | Windows 10 1809 或更高,一致 |
| macos | 12.0 | README 写 10.15,构建侧更严格 |
| android | 24.0 | README 写 Android 5.0 (API 21),构建侧更严格 |
| ios | 15.0 | iOS 开发中 |
| maccatalyst | 15.0 | — |
| tizen | 6.5 | — |
1<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
2<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
3<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'macos'">12.0</SupportedOSPlatformVersion>
4<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24.0</SupportedOSPlatformVersion>
5<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>构建脚本
仓库 packaging/ 目录提供的构建入口:
| 脚本 | 用途 |
|---|---|
build.cmd / build.ps1 / build.v1.ps1 | Windows 侧构建脚本 |
build-osx-app.sh | macOS .app 打包脚本 |
Info.plist | macOS 应用元数据 |
SHA256.ps1 | 发布产物校验和生成 |
Tool/ 目录下还有一组服务于开发流程的内部工具(来自 src/README.md):ST.Tools.OpenSourceLibraryList(开源许可清单生成,需 GitHub API Token)、ST.Tools.Translate(Resx 自动翻译,需 Azure Translation Key)、ST.Tools.Publish(发布控制台工具)、ST.Tools.AreaImport(从高德 Excel 导入地区数据)等。这些工具不属于产品运行时,属于「仓库自带工具链」。
核心流程:从克隆到运行
关键步骤说明:
- 克隆仓库:标准 GitHub 克隆即可;仓库自带
NuGet.Config管理包源,global.json会自动约束 SDK 选择。 - SDK 校验先行:
rollForward: latestMajor意味着只要本机装有 11 或更高版本的 .NET SDK 即可直接构建,无需精确匹配补丁版本;若使用预览版 SDK 也是允许的(allowPrerelease: true)。 - 选择启动项:桌面开发选
ST.Client.Desktop.Avalonia.App;移动端选ST.Client.Android.App(Xamarin.Android)或ST.Client.Maui.App。移动端目标仅在对应宿主 OS(或安装了相应工作负载的机器)上参与构建。 - 构建:TFM 由仓库级 props 按宿主 OS 注入,开发者无需手动指定平台目标;
$(DotNet_Version)决定统一的netX前缀。 - 运行与验证:程序启动后默认携带网络加速、账号切换、库存游戏、本地令牌等默认插件(3.0 起为可禁用的插件形态),可直接在 UI 中体验全部内置功能。
配置选项
仓库级构建相关配置(对「快速开始」真正起作用的部分):
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sdk.version | string | "11.0.0" | global.json 声明的基准 .NET SDK 版本 |
sdk.rollForward | string | "latestMajor" | 允许更高主版本 SDK 参与构建 |
sdk.allowPrerelease | bool | true | 允许使用预览版 SDK |
TargetFrameworks | string列表 | net$(DotNet_Version) | 由 props 注入,Windows 宿主追加 -macos、-windows10.0.19041.0 |
SupportedOSPlatformVersion(windows) | string | 10.0.17763.0 | Windows 最低系统版本(=1809) |
SupportedOSPlatformVersion(macos) | string | 12.0 | macOS 最低版本 |
SupportedOSPlatformVersion(android) | string | 24.0 | Android 最低 API |
SupportedOSPlatformVersion(ios/maccatalyst) | string | 15.0 | Apple 平台最低版本 |
SupportedOSPlatformVersion(tizen) | string | 6.5 | Tizen 最低版本 |
应用自身的运行时配置(加速规则、令牌数据库等)属于功能专题页面范畴,本页不展开。
Failure Modes, Edge Cases & Concurrency
基于仓库可见证据,快速开始阶段可能遇到的问题与规避方式:
- SDK 版本不匹配:
global.json的version: 11.0.0+rollForward: latestMajor意味着 SDK 主版本低于 11 会直接被dotnetCLI 拒绝(提示找不到匹配 SDK)。解决办法是安装 .NET SDK 11 或更高版本,而不是修改global.json。 - 在错误的宿主 OS 上构建移动端目标:
TFM_NETX_WITH_ALL.props用IsOSPlatform条件过滤 TargetFrameworks,Linux 宿主只构建基础 TFM。若强行在 Linux 上指定-android目标将失败;Android 构建需要 OpenJDK 17 与 Android Studio(Electric Eel+)。 - MSIX 与绿色版共存:Windows 同时分发
.msix与.7z。二者数据目录可能不同(MSIX 有包身份下的重定向),从一种安装形态切换到另一种时注意数据不互通的风险;具体目录结构见doc/program-file-structure/Windows.md。 - macOS 子进程 RID 问题:
doc/publish.md注释中记录了一个已知约束——子服务进程二进制的 RID 通过RuntimeInformation.ProcessArchitecture.ToString()决定,并通过PublishFolderType="Assembly"复制到 MonoBundle;AOT 的 AppHost 无法加载框架依赖发布的程序集(错误Initialization for self-contained components is not supported)。这解释了为什么发布产物对宿主架构敏感,下载时务必选择与 CPU 架构匹配的x64/Arm64包。 - AUR
watt-toolkit-git的构建风险:README 明确该包拉取最新源码构建,「也许会构建失败」,追求稳定的用户应选watt-toolkit-bin。
Performance / Operational Notes
- 分发渠道的取舍:商店渠道(Steam 商店 / MS Store)可获得自动更新;GitHub/码云 Release 需手动升级;
.tar.zst/.7z为免安装形态,适合便携与容器场景。 - 多架构发布:所有平台均提供 Arm64 产物,Apple Silicon 与 Windows on ARM 用户应优先选择对应架构包,避免 Rosetta/模拟层开销。
- 发布产物的完整性校验:
packaging/SHA256.ps1用于生成校验和,下载第三方镜像的安装包时建议核对哈希。 - 贡献流程:README 提供 QQ 群(960746023)与 Bilibili 官方账号作为社区支持渠道;翻译协作走 Crowdin(
crowdin.com/project/steampp,仓库根有crowdin.yml)。
Extension Points
- 插件体系:3.0 起网络加速、账号切换、库存游戏、本地令牌等均为「默认插件」,可被用户删除或禁用。这为第三方扩展预留了同一套加载模型,插件机制的内部实现属于专题页面。
- 平台适配扩展:新增平台能力时应落在
Lib/Platforms/ST.Client.<Platform>对应项目中,遵循「平台差异只在 Platforms 层」的分层约束。 - 本地化扩展:UI 文案位于
Application/UI/Resx与Properties/SR(见src/README.md命名空间约定),配合ST.Tools.Translate工具与 Crowdin 完成多语言;新增语言无需改动代码结构。 - 内部工具链扩展:
Tool/目录的许可清单、翻译、发布等工具彼此独立,新增开发辅助工具按同样模式添加独立项目即可。
Related Links
- README.md — 功能列表、下载渠道、开发环境与支持的操作系统的权威来源
- src/README.md — 解决方案项目结构与启动项清单
- global.json — .NET SDK 版本约束
- src/TFM_NETX_WITH_ALL.props — 按宿主 OS 注入的目标框架矩阵
- src/TFM_NETX_WITH_WINDOWS.props — 各平台最低支持版本
- doc/publish.md — 发布资产命名与平台产物矩阵
- doc/file-system.md 与 doc/program-file-structure/ — 程序文件目录结构
- doc/download-guide.md — 下载指南