本文档提供了设置开发环境和从源代码构建 PowerToys 的全面说明。它涵盖了构建系统架构、依赖项管理以及 C++ 和 C# 组件的完整构建过程。
有关创建新 PowerToys 模块的信息,请参阅 创建新的 PowerToy。有关开发调试工具的详细信息,请参阅 调试工具。
构建 PowerToys 需要特定的开发工具和 Windows SDK 版本,以确保所有模块的兼容性。
来源:Cpp.Build.props99-102 src/settings-ui/Settings.UI/PowerToys.Settings.csproj1-21
PowerToys 使用混合构建系统,结合 MSBuild 来处理 C++ 和 C# 项目,并通过 NuGet 进行集中的依赖项管理。
来源:Directory.Packages.props1-110 Cpp.Build.props1-126 src/settings-ui/Settings.UI/PowerToys.Settings.csproj1-149
PowerToys 支持集中式包版本管理,以确保整个解决方案中所有项目的一致性。
构建系统在 Directory.Packages.props 中使用集中式 NuGet 包版本控制
| 类别 | 目的 | 关键包 |
|---|---|---|
| Windows 应用 SDK | WinUI3、现代 Windows API | Microsoft.WindowsAppSDK |
| WinRT 互操作 | C++/WinRT 投影 | Microsoft.Windows.CppWinRT, Microsoft.Windows.CsWinRT |
| UI 框架 | WinUI3 社区控件 | CommunityToolkit.WinUI.* |
| 系统集成 | Windows SDK、WebView2 | Microsoft.Windows.SDK.BuildTools, Microsoft.Web.WebView2 |
| 开发工具 | 代码分析、测试 | Microsoft.CodeAnalysis.NetAnalyzers, MSTest |
来源:Directory.Packages.props5-104 src/modules/powerrename/PowerRenameUILib/packages.config1-10
PowerToys 支持多种构建配置,以适应不同的部署场景和目标体系结构。
C++ 构建配置位于 Cpp.Build.props 中,定义了项目范围的编译器和链接器设置。
| 设置 | Debug 值 | Release 值 | 目的 |
|---|---|---|---|
| 优化 | 已禁用 | MaxSpeed | 性能优化 |
| 运行时库 | MultiThreadedDebug | MultiThreaded | 静态运行时链接 |
| 控制流保护 | Guard | Guard | 安全功能 |
| 语言标准 | stdcpplatest | stdcpplatest | 现代 C++ 功能 |
| 警告级别 | Level4 | Level4 | 严格警告报告 |
来源:Cpp.Build.props71-95 src/modules/powerrename/PowerRenameUILib/PowerRenameUI.vcxproj33-47
构建过程涉及多个阶段,从环境设置到最终输出生成。
适用于自动化构建或 CI/CD 场景
PowerToys/
├── x64/
│ ├── Debug/
│ │ ├── PowerToys.exe # Main runner executable
│ │ ├── WinUI3Apps/
│ │ │ ├── PowerToys.Settings.exe # Settings application
│ │ │ ├── PowerToys.PowerRename.exe # PowerRename UI
│ │ │ └── PowerToys.MeasureToolCore.dll
│ │ └── Tools/
│ │ └── PowerToys.BugReportTool.exe
│ └── Release/ # Same structure as Debug
└── ARM64/ # Same structure as x64
来源:src/runner/UpdateUtils.cpp81-92 tools/BugReportTool/BugReportTool/BugReportTool.vcxproj18-19
设置开发环境需要仔细关注工具版本和配置。
克隆仓库
安装先决条件
配置 Visual Studio
PowerToys.slnrunner 以进行调试验证构建环境
PowerToys 包含在 CppRuleSet.ruleset 中定义的全面代码分析规则
构建系统通过 PowerShell 脚本包含自动版本管理
UpdateVersions.ps1:更新所有项目中的 WindowsAppSDK 版本Directory.Packages.props 维护一致性nuget.config 配置来源:CppRuleSet.ruleset1-323 .pipelines/UpdateVersions.ps1115-165 Cpp.Build.props25-29
问题:NuGet 包还原失败 解决方案
dotnet nuget locals all --clearnuget.config 中的程序包源Directory.Packages.props 以查看版本冲突问题:混合平台或配置错误 解决方案
Build > Clean Solution问题:找不到 SDK 版本错误 解决方案
WindowsTargetPlatformVersion问题:WindowsAppSDK 版本不匹配 解决方案
UpdateVersions.ps1 以同步版本WindowsAppSDKSelfContained=true来源:.pipelines/UpdateVersions.ps1129-165 src/settings-ui/Settings.UI/PowerToys.Settings.csproj16-21