首页
/ PowerToys DSC settings 资源配置完全指南:用声明式配置管理全部模块

PowerToys DSC settings 资源配置完全指南:用声明式配置管理全部模块

2026-09-06 18:11:40作者:贡沫苏Truman

本文以 PowerToys 仓库中的 settings 资源参考文档 为主体,结合 src/dscPowerToys.DSC 的 CLI 实现、单元测试与官方示例配置,系统讲解如何通过 Microsoft Desired State Configuration(DSC)v3 以声明式方式查看、测试、导出与强制应用 PowerToys 各工具的配置状态。读完本文,你将掌握 PowerToys.DSC.exe 的七个核心命令,能够在普通 DSC 配置文档与 WinGet 配置工作流中开箱即用地管理 App、Awake、FancyZones、ColorPicker、ImageResizer 等模块的配置,并理解 settings 资源背后的 get / set / test / export / schema / manifest 六种 DSC 协议操作的实现机制。

1. 什么是 PowerToys DSC settings 资源

settings 资源是 PowerToys 为 Microsoft Desired State Configuration(DSC)v3 提供的配置管理资源,由随 PowerToys 安装的 PowerToys.DSC.exe 命令行工具承载(见仓库中的 PowerToys.DSC 工程)。

它的核心价值在于把“PowerToys 的配置”从图形设置界面中解放出来,变成可声明、可测试、可强制执行的代码化状态

  • 为每一个 PowerToys 工具(模块)声明并强制执行期望的配置状态;
  • 在多台机器之间自动化地同步 PowerToys 配置;
  • 与 WinGet 以及其他支持 DSC v3 的工具链集成;
  • 将 PowerToys 设置纳入版本控制(即 Settings as Code)。

每个 PowerToys 工具都有自己可管理的配置属性,而 settings 资源在底层通过统一的资源抽象支持 DSC 的全部标准操作:getsettestexport,以及面向 DSC 宿主协议的 schemamanifest 生成。

从源码看,这一抽象由三部分组成:

  1. 程序入口 Program.cs 基于 System.CommandLine 注册了七个根命令:getsetexporttestschemamanifestmodules
  2. 资源抽象基类 BaseResource.cs 定义了 GetState/SetState/TestState/ExportState/Schema/Manifest/GetSupportedModules 七个抽象方法,并统一负责 JSON 输出(成功信息写入 stdout,错误、警告等信息以 JSON 形式写入 stderr);
  3. 具体实现 SettingsResource.cs 维护了一张“模块名 → 设置类型”的字典,将 25 个模块映射到 Microsoft.PowerToys.Settings.UI.Library 中的对应强类型设置类。

2. settings 资源支持的模块清单

settings 资源几乎覆盖了 PowerToys 的全部工具模块:

模块 用途 详细属性文档
App 全局应用设置(工具开关、开机启动、主题等) App 模块
AdvancedPaste 高级剪贴板与粘贴操作 AdvancedPaste 模块
AlwaysOnTop 窗口置顶配置 AlwaysOnTop 模块
Awake 保持唤醒定时器设置 Awake 模块
ColorPicker 取色器激活与格式设置 ColorPicker 模块
CropAndLock 窗口裁剪设置 CropAndLock 模块
EnvironmentVariables 环境变量编辑器设置 EnvironmentVariables 模块
FancyZones 窗口布局与分区配置 FancyZones 模块
FileLocksmith 文件占用检测设置 FileLocksmith 模块
FindMyMouse 鼠标定位器设置 FindMyMouse 模块
Hosts Hosts 文件编辑器设置 Hosts 模块
ImageResizer 图片尺寸调整配置 ImageResizer 模块
KeyboardManager 按键重映射与快捷键设置 KeyboardManager 模块
MeasureTool 屏幕测量工具设置 MeasureTool 模块
MouseHighlighter 鼠标高亮配置 MouseHighlighter 模块
MouseJump 鼠标跳转导航设置 MouseJump 模块
MousePointerCrosshairs 鼠标十字准星显示设置 MousePointerCrosshairs 模块
Peek 文件预览设置 Peek 模块
PowerAccent 快速输入重音字符设置 PowerAccent 模块
PowerOCR 屏幕文字提取设置 PowerOCR 模块
PowerRename 批量重命名配置 PowerRename 模块
RegistryPreview 注册表文件预览设置 RegistryPreview 模块
ShortcutGuide 快捷键覆盖层显示设置 ShortcutGuide 模块
Workspaces 应用工作区设置 Workspaces 模块
ZoomIt 屏幕缩放与标注设置 ZoomIt 模块

说明:与仓库 overview 文档 中列出的模块相比,源码中的映射表(见 SettingsResource.cs)并未包含 MouseWithoutBorders、PowerLauncher(Command Palette)与 NewPlus。源码注释给出的原因是:MouseWithoutBorders 包含敏感配置值(导出/导入存在安全隐患),而 PowerLauncher 与 NewPlus 的设置中使用了绝对文件路径,跨机器不可移植。若要配置上述三个模块,需要直接使用其配置文件或图形界面,无法通过 settings 资源导出迁移。

每个模块可配置的具体属性(类型、取值范围、默认值、示例)在 doc/dsc/modules 目录下均有独立参考文档。

3. 支持的三种使用方式

PowerToys DSC 提供三种等效的使用方式,你可以根据自己的工作流选择。

3.1 直接执行 PowerToys.DSC.exe

最轻量的方式,直接在命令行(PowerShell)中执行工具命令:

# 获取某个模块的当前配置
PowerToys.DSC.exe get --resource 'settings' --module Awake

# 设置某个模块的期望配置
$input = '{"settings":{...}}'
PowerToys.DSC.exe set --resource 'settings' --module Awake --input $input

# 测试当前配置是否与期望一致
PowerToys.DSC.exe test --resource 'settings' --module Awake --input $input

命令统一遵守 <command> --resource 'settings' --module <ModuleName> 的参数约定,--input 用于传入 JSON 格式的期望状态。

3.2 标准 DSC 配置文档(dsc 命令 / dscv3)

把资源配置写入符合 DSC v3 schema 的 YAML 文档,交由 DSC 宿主执行:

# powertoys-config.dsc.yaml
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
  - name: Configure Awake
    type: Microsoft.PowerToys/AwakeSettings
    properties:
      settings:
        properties:
          keepDisplayOn: true
          mode: 1
        name: Awake
        version: 0.0.1

资源 type 的命名遵循 Microsoft.PowerToys/<Module>Settings 模式。settings 对象内部包含 name(模块名)、version(配置 schema 版本号)与 properties(各模块实际配置项)三个部分,这一结构与直接执行时 --input 传入的 JSON 完全同构。

3.3 WinGet 配置

将 PowerToys 的安装与配置编排进同一条 WinGet Configuration 文档,实现“安装即配置”:

# winget-powertoys.yaml
$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor: dscv3
resources:
  - name: Install PowerToys
    type: Microsoft.WinGet.DSC/WinGetPackage
    properties:
      id: Microsoft.PowerToys
      source: winget

  - name: Configure FancyZones
    type: Microsoft.PowerToys/FancyZonesSettings
    properties:
      settings:
        properties:
          fancyzones_shiftDrag: true
          fancyzones_mouseSwitch: true
        name: FancyZones
        version: 1.0

该文档使用 Microsoft.WinGet.DSC/WinGetPackage 先安装 Microsoft.PowerToys,再通过 Microsoft.PowerToys/FancyZonesSettings 资源应用配置。

实践提示:仓库中提供了大量可直接改用的官方示例,见 src/dsc/Microsoft.PowerToys.Configure/examples,包括 enableAllModules.winget(启用全部模块)、disableAllModules.winget(禁用全部模块)、installAndConfiguration.winget(安装并配置)与 configuration.winget(纯配置)等场景。

4. settings 资源的全部操作详解

4.1 列出支持的模块(modules)

查看当前 settings 资源可以配置哪些模块:

# 列出全部可配置模块。
PowerToys.DSC.exe modules --resource 'settings'

底层对应 SettingsResource.GetSupportedModules(),返回按字母序排序的模块字典键集合。

4.2 获取当前状态(get / export)

读取模块的当前配置状态。exportget 输出完全一致——从源码看,GetState 直接委托给 ExportStateSettingsResource.cs),因此两者的 JSON 输出格式完全相同。

直接执行:

# 获取某模块的当前设置。
PowerToys.DSC.exe get --resource 'settings' --module <ModuleName>

DSC 配置: 以获取 Awake 当前状态为例,只需给出空 properties 即可触发 get 语义:

$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
  - name: Get Awake settings
    type: Microsoft.PowerToys/AwakeSettings
    properties: {}

WinGet 配置: 同理,例如查询 FancyZones 的当前状态:

$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor: dscv3
resources:
  - name: Get FancyZones settings
    type: Microsoft.PowerToys/FancyZonesSettings
    properties: {}

4.3 导出当前状态(export)

exportget 语义一致,用于备份或采集当前配置:

# 导出某模块当前设置。
PowerToys.DSC.exe export --resource 'settings' --module <ModuleName>

一个常见的自动化用法是遍历 modules 输出,把每个模块的配置导出汇总成一份 JSON 备份文件(详见第 6 节的示例五)。

4.4 设置期望状态(set)

向模块下发期望配置,只更新与期望状态存在差异的属性。从源码看,SetState 会先 GetState() 拉取当前值、计算差异 JSON,再通过 TestState() 判断是否已一致;只有在不一致时才真正写回设置(SettingsResource.cs)。

直接执行: 以 Awake 模块为例,期望“保持屏幕常亮且无限期唤醒”:

# 为模块设置期望配置。
$input = '{
  "settings": {
    "properties": {
      "keepDisplayOn": true,
      "mode": 1
    },
    "name": "Awake",
    "version": "0.0.1"
  }
}'
PowerToys.DSC.exe set --resource 'settings' --module Awake --input $input

DSC 配置:

$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
  - name: Configure Awake
    type: Microsoft.PowerToys/AwakeSettings
    properties:
      settings:
        properties:
          keepDisplayOn: true
          mode: 1
        name: Awake
        version: 0.0.1

WinGet 配置: 将“安装 PowerToys + 配置 FancyZones”放在同一文档中:

$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor: dscv3
resources:
  - name: Install and configure PowerToys
    type: Microsoft.WinGet.DSC/WinGetPackage
    properties:
      id: Microsoft.PowerToys
      source: winget

  - name: Configure FancyZones
    type: Microsoft.PowerToys/FancyZonesSettings
    properties:
      settings:
        properties:
          fancyzones_shiftDrag: true
          fancyzones_mouseSwitch: true
          fancyzones_displayOrWorkAreaChange_moveWindows: true
        name: FancyZones
        version: 1.0

4.5 测试期望状态(test)

校验当前配置是否与期望状态一致(即检测“配置漂移”)。返回的输出中包含 _inDesiredState 属性:值为 true 表示一致,false 表示有差异。

直接执行:

# 测试当前状态是否与期望一致。
$input = '{
  "settings": {
    "properties": {
      "keepDisplayOn": true,
      "mode": 1
    },
    "name": "Awake",
    "version": "0.0.1"
  }
}'
PowerToys.DSC.exe test --resource 'settings' --module Awake --input $input

DSC 配置:

$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
  - name: Test Awake configuration
    type: Microsoft.PowerToys/AwakeSettings
    properties:
      settings:
        properties:
          keepDisplayOn: true
          mode: 1
        name: Awake
        version: 0.0.1

从源码可以看到,testset 共享同一套状态比较与差异计算逻辑:TestState 会调用 data.GetState()、把比较结果写入输出的 InDesiredState,并同时输出差异 JSON(SettingsResource.cs)。差异输出由 SettingsFunctionData.GetDiffJson() 生成,供上层判断具体哪些属性需要修正。

4.6 生成 JSON Schema(schema)

为某个模块生成 JSON Schema,描述该模块全部可配置属性及其类型、取值范围,可用于编辑器补全、校验或生成图形表单。

直接执行:

# 获取某模块的 JSON Schema。
PowerToys.DSC.exe schema --resource 'settings' --module Awake

# 通过管道格式化,便于阅读。
PowerToys.DSC.exe schema --resource 'settings' --module Awake `
  | ConvertFrom-Json | ConvertTo-Json -Depth 10

纵深背景:仓库中的 PowerToys.Settings.DSC.Schema.Generator 工程(Program.csSchemaGeneration.csDSCGeneration.cs 等)以静态工具的形式生成模块属性 JSON Schema、DSC 配置示例乃至每模块的 Markdown 文档——doc/dsc/modules/ 下各模块文档即由该生成器产出,保证了“模块属性文档、schema、运行时校验”三者的同源一致。

4.7 生成 DSC 资源 Manifest(manifest)

生成符合 DSC v3 协议规范的资源 Manifest 文件,供 DSC 宿主(dscv3 / WinGet)发现资源能力(stdin/json-input/command 方法、是否支持 pretest 等)。可以针对单模块生成,也可以一次生成全部模块的 Manifest。

直接执行:

# 为指定模块生成 Manifest 到目录。
$outputDir = "C:\manifests"
PowerToys.DSC.exe manifest --resource 'settings' --module Awake `
  --outputDir $outputDir

# 为所有模块生成 Manifest。
PowerToys.DSC.exe manifest --resource 'settings' --outputDir $outputDir

# 不指定 --outputDir 时,把 Manifest 直接打印到控制台。
PowerToys.DSC.exe manifest --resource 'settings' --module Awake

底层实现中,Manifest 会生成名为 microsoft.powertoys.<module>.settings.dsc.resource.json 的资源描述文件(SettingsResource.cs);每个 Manifest 会声明该模块的 export/get 为 stdin 方法、set/test 为 json-input 方法(其中 set 开启 implementsPreteststateAndDiff)、schema 为 command 方法(见 GenerateManifest 实现 SettingsResource.cs)。

5. 各模块的核心配置属性速览

settings 资源的 properties 即对应各模块配置文件(JSON)中的实际字段。以下以最常用的三个模块为例说明属性形态(完整清单见各模块参考文档):

5.1 App 模块(全局设置)

App 模块管理的是 PowerToys 全局状态与其他模块的开头状态(注意它的属性是全局粒度的,不依赖 src/modules 下某个具体工具工程):

  • Enabled(Object):每个工具的布尔开关,如 AwakeFancyZonesPowerRenameColorPickerAdvancedPaste 等,对应 App.md 中列出的 24 个工具键;
  • startup(boolean,默认 true:登录时是否自动启动 PowerToys;
  • run_elevated(boolean,默认 false:是否以管理员权限运行;
  • theme(string,取值 light / dark / system,默认 system:应用主题。

5.2 Awake 模块(保持唤醒)

Awake 模块属性在 Awake.md 中有完整参考:

  • keepDisplayOn(boolean,默认 true:为 true 时防止显示器关闭;为 false 时仅阻止系统睡眠、显示器仍遵循电源计划关闭;
  • mode(integer,默认 00 关闭、1 无限期保持唤醒、2 定时唤醒(配合 intervalHours/intervalMinutes)、3 保持唤醒到指定时刻(配合 expirationDateTime);
  • intervalHours(integer,0999)与 intervalMinutes(integer,059mode=2 时的定时时长;
  • expirationDateTime(ISO 8601 字符串)mode=3 的到期时间,格式形如 "2025-12-31T23:59:59.0000000-08:00"
  • customTrayTimes(object):托盘右键菜单中的自定义快捷时长预设,键为显示名、值为时长定义。

5.3 FancyZones 模块(窗口布局)

FancyZones 模块(FancyZones.md)的属性与设置界面中的功能开关一一对应,例如:

  • fancyzones_shiftDrag(boolean,默认 true:拖动窗口时按住 Shift 是否触发分区吸附;
  • fancyzones_mouseSwitch(boolean,默认 false:拖动窗口跨显示器时是否弹出分区选择;
  • fancyzones_overrideSnapHotkeys(boolean,默认 false:是否覆盖 Windows 系统贴靠热键(Win+方向键);
  • fancyzones_displayOrWorkAreaChange_moveWindows(boolean):显示器分辨率或工作区变化时是否移动窗口适配;
  • fancyzones_zoneSetChange_moveWindows(boolean):切换布局方案时是否自动移动窗口;
  • fancyzones_appLastZone_moveWindows(boolean,默认 true:应用再次打开时是否恢复到上次所在分区;
  • fancyzones_overlappingZonesAlgorithm(integer):多分区重叠时的命中算法:0 最小分区、1 最大分区、2 按位置。

这些属性名与 src/modules/fancyzones 中实际持久化的设置键一致,属性改动会直接落到本机 PowerToys 的配置存储中,重启对应模块后生效。

6. 综合示例

示例 1:启用并配置 FancyZones(直接执行)

先用 get 拉取当前配置,再构造期望状态并以 set 应用:

# 获取当前 FancyZones 配置。
$current = PowerToys.DSC.exe get --resource 'settings' --module FancyZones `
  | ConvertFrom-Json

# 构造期望状态。
$desired = @{
    settings = @{
        properties = @{
            fancyzones_shiftDrag = $true
            fancyzones_mouseSwitch = $true
            fancyzones_displayOrWorkAreaChange_moveWindows = $true
        }
        name = "FancyZones"
        version = "1.0"
    }
} | ConvertTo-Json -Depth 10 -Compress

# 应用配置。
PowerToys.DSC.exe set --resource 'settings' --module FancyZones `
  --input $desired

这种“先 get 当前值 → 构造 HashTable → 压缩成 JSON → set 应用”的模式适合在脚本中做增量修改,避免手工拼写完整 JSON。

示例 2:一份配置文档同时管理多个工具

在单个 DSC 文档里声明 App(工具开关)、Awake 与 ColorPicker 的期望状态:

# powertoys-multi.dsc.yaml
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
  - name: Enable PowerToys utilities
    type: Microsoft.PowerToys/AppSettings
    properties:
      settings:
        properties:
          Enabled:
            Awake: true
            FancyZones: true
            PowerRename: true
            ColorPicker: true
        name: App
        version: 1.0

  - name: Configure Awake
    type: Microsoft.PowerToys/AwakeSettings
    properties:
      settings:
        properties:
          keepDisplayOn: true
          mode: 1
        name: Awake
        version: 0.0.1

  - name: Configure ColorPicker
    type: Microsoft.PowerToys/ColorPickerSettings
    properties:
      settings:
        properties:
          changecursor: true
          copiedcolorrepresentation: "HEX"
        name: ColorPicker
        version: 1.0

注意:同一文档中每个资源 type 都使用各自的 <Module>Settings 资源名,但它们在实现上都由同一个 PowerToys.DSC.exe settings 资源在背后驱动(即 manifest 生成时每个模块独立一个 manifest、但指向同一个 --resource 'settings' 调用,见 4.7 节)。

示例 3:WinGet 安装 PowerToys 并应用通用/布局/图像配置

把包安装与三层配置编排在一条文档中,然后交给 winget configure 执行:

# winget-powertoys-setup.yaml
$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor: dscv3
resources:
  - name: Install PowerToys
    type: Microsoft.WinGet.DSC/WinGetPackage
    properties:
      id: Microsoft.PowerToys
      source: winget
      ensure: Present

  - name: Configure general settings
    type: Microsoft.PowerToys/AppSettings
    properties:
      settings:
        properties:
          run_elevated: true
          startup: true
          theme: "dark"
        name: App
        version: 1.0

  - name: Configure FancyZones
    type: Microsoft.PowerToys/FancyZonesSettings
    properties:
      settings:
        properties:
          fancyzones_shiftDrag: true
          fancyzones_zoneSetChange_moveWindows: true
        name: FancyZones
        version: 1.0

  - name: Configure ImageResizer
    type: Microsoft.PowerToys/ImageResizerSettings
    properties:
      settings:
        properties:
          ImageResizerSizes:
            - Name: Small
              Width: 854
              Height: 480
              Unit: Pixel
              Fit: Fit
            - Name: Medium
              Width: 1920
              Height: 1080
              Unit: Pixel
              Fit: Fit
        name: ImageResizer
        version: 1.0

应用这条配置:

winget configure winget-powertoys-setup.yaml

其中 ImageResizerSizes 展示了数组嵌套对象属性的写法(每个尺寸包含 Name / Width / Height / Unit / Fit),这类结构化属性在 ImageResizer 等模块中很常见。

示例 4:检测并修复配置漂移

test 判定是否漂移,若已漂移则直接以 set 修复——这是 DSC“声明式收敛”在 PowerShell 脚本中的最小落地实现:

# 定义期望状态。
$desired = @{
    settings = @{
        properties = @{
            keepDisplayOn = $true
            mode = 1
        }
        name = "Awake"
        version = "0.0.1"
    }
} | ConvertTo-Json -Depth 10 -Compress

# 测试是否有漂移。
$result = PowerToys.DSC.exe test --resource 'settings' --module Awake `
  --input $desired | ConvertFrom-Json

if ($result._inDesiredState) {
    Write-Host "Configuration is in desired state"
} else {
    Write-Host "Configuration has drifted from desired state"

    # 修复漂移:应用配置。
    PowerToys.DSC.exe set --resource 'settings' --module Awake `
      --input $desired
}

示例 5:导出全部模块配置做备份

遍历 modules 输出,逐个 export,最后落盘为一份 JSON 备份:

# 获取全部模块列表。
$modules = PowerToys.DSC.exe modules --resource 'settings'

# 逐个导出模块配置。
$configurations = @{}
foreach ($module in $modules) {
    $config = PowerToys.DSC.exe export --resource 'settings' `
      --module $module | ConvertFrom-Json
    $configurations[$module] = $config
}

# 保存到文件。
$configurations | ConvertTo-Json -Depth 10 `
  | Out-File "powertoys-backup.json"

由于 exportget 输出完全一致(见 4.2 节源码说明),该脚本也可用 get 替代 export。注意第 2 节提到的不支持模块(MouseWithoutBorders、PowerLauncher、NewPlus)不会出现在列表中,如需备份需另行处理其设置文件。

7. 从源码理解 settings 资源的内部工作机制

7.1 模块分发的核心:模块名 → 强类型设置类

SettingsResource 构造时用“模块名 → 工厂方法”的字典完成分发(SettingsResource.cs):

{ AppModule,  CreateModuleFunctionData<GeneralSettings> },                     // App
{ nameof(ModuleType.Awake), CreateModuleFunctionData<AwakeSettings> },          // Awake
{ nameof(ModuleType.FancyZones), CreateModuleFunctionData<FancyZonesSettings> },// FancyZones
// ...

每个工厂方法都要求设置类实现 ISettingsConfig 接口,再包装成泛型 SettingsFunctionData<TSettingsConfig>。这也解释了为什么“资源支持哪些模块”可以由 modules 命令枚举——本质就是遍历字典键。

7.2 每条命令如何驱动资源操作

Program.cs 注册的七个命令类都继承 BaseCommand,并把 ExitCode 与资源方法的返回值绑定:方法返回 true 则退出码为 0,否则为 1。例如 SetCommand.cs 内部执行 Resource.SetState(Input)。命令选项(--resource--module--input--outputDir)由 Options 目录下对应的选项类定义,其中 --resource 默认为 settings--module 缺省时回退到 App 模块(见 SettingsResource.csModuleOrDefault)。

7.3 测试如何保证正确性

仓库为 settings 资源准备了完整的单元测试工程 PowerToys.DSC.UnitTests:每个模块一个测试文件(如 SettingsResourceAwakeModuleTest.csSettingsResourceFancyZonesModuleTest.cs),并抽象出泛型基类 SettingsResourceModuleTest`1.cs,统一验证“get / set / test / schema”在各模块上的往返一致性。这一测试布局印证了 settings 资源的模块扩展方式是“表驱动”的:新增模块主要是把新设置类型加入字典。

7.4 与配置文件体系的关系

从架构上看,settings 资源操作的属性与设置界面(Settings.UI.Library)中定义、各模块运行时读取的是同一份强类型设置结构。换句话说,DSC 资源是“设置读写能力的命令行投影”:把原来只能在图形界面或 JSON 文件中手工维护的配置,变成可脚本化、可版本化、可被 DSC 引擎强制收敛的状态对象。

8. 查看更多

登录后查看全文
热门项目推荐
相关项目推荐