VSIX 颜色编译器

Visual Studio 扩展颜色编译器工具是一个控制台应用程序,它采用一个表示现有 Visual Studio 主题颜色的 .xml 文件,并将其覆盖到 .pkgdef 文件中,以便可以在 Visual Studio 中使用这些颜色。 由于比较 .xml 文件之间的差异很容易,因此此工具可用于管理源代码管理中的自定义颜色。 还可以将其挂钩到生成环境中,以便生成输出是有效的 .pkgdef 文件。

主题 XML 架构

完整的主题 .xml 文件如下所示:

<Themes>
      <!—one or Theme elements -->
      <Theme>
        <!-- one or more Category elements -->
        <Category>
          <!-- one or more Color elements -->
          <Color>
            <!-- zero or one Background element -->
            <Background />
            <!-- zero or one Foreground element -->
            <Foreground />
          </Color>
        </Category>
      </Theme>
</Themes>

主题

<Theme> 元素定义整个主题。 主题必须至少包含一个 <Category> 元素。 主题元素的定义如下所示:

<Theme Name="name" GUID="guid">
      <!-- one or more Category elements -->
</Theme>
属性 定义
Name [必需]主题的名称
GUID [必需]主题的 GUID (必须与 GUID 格式匹配)

为 Visual Studio 创建自定义颜色时,需要为以下主题定义这些颜色。 如果特定主题不存在颜色,Visual Studio 将尝试从浅色主题加载缺失的颜色。

主题名称 主题 GUID
Light {de3dbbcd-f642-433c-8353-8f1df4370aba}
{1ded0138-47ce-435e-84ef-9ec1f439b749}
Blue {a4d6a176-b948-4b29-8c66-53c97a1ed7d0}
高对比度 {a4d6a176-b948-4b29-8c66-53c97a1ed7d0}
主题名称 主题 GUID
Light {de3dbbcd-f642-433c-8353-8f1df4370aba}
{1ded0138-47ce-435e-84ef-9ec1f439b749}
高对比度 {a4d6a176-b948-4b29-8c66-53c97a1ed7d0}

类别

<Category> 元素定义主题中的颜色集合。 类别必须至少包含一个 <Color> 元素。 类别元素的定义如下所示:

<Category Name="name" GUID="guid">
  <!-- one or more Color elements -->
</Category>
属性 定义
Name [必需]类别的名称
GUID [必需]类别的 GUID (必须与 GUID 格式匹配)

类别名称提供逻辑分组,应尽可能窄地定义。

:::moniker range>=“vs-2026”类别名称为可用于高级别类似范围的颜色提供逻辑分组。 在 Visual Studio 2026 中,设计系统(包括颜色分类)已简化,以促进一致的应用程序和集中更新。 例如,Visual Studio 2026 主题具有以下类别:- Decorative 颜色可用于区分图表和彩色选项卡等对象。 - Shell 颜色用于类似于 Windows :::moniker-end 的常见控件和图面

颜色

<Color> 元素定义组件或 UI 状态的颜色。 颜色的首选命名方案是 [UI 类型][State]。 不要使用“color”一词,因为它是冗余的。 颜色应清楚地指示将应用颜色的元素类型和情况或“状态”。 颜色不得为空,并且必须包含 Background< 和 Foreground> 元素的一个或两者<>。 颜色元素的定义如下所示:

<Color> 元素定义 UI 元素类型的颜色。 颜色的首选命名方案是 [Type][Part][Level]:- 是 UI 中颜色在 UI 中扮演的顶级角色,例如,/>,等等,是更精细的应用程序,例如。 - Level描述渐变中颜色的状态或步骤,例如DefaultDisabledPrimarySecondary等。不要使用“color”一词,因为它是冗余的。 专注于高级预期用途,而不是特定功能,以便颜色标记可以重复使用,以便用于类似的控件和状态,以便更好地保持一致性。 颜色应清楚地指示元素类型和应用颜色的情况。 颜色不得为空,并且必须包含 Background< 和 Foreground> 元素的一个或两者<>。 颜色元素的定义如下所示:

<Color Name="name">
  <Background /> <!-- zero or one Background element -->
  <Foreground /> <!-- zero or one Foreground element -->
</Color>
属性 定义
Name [必需]颜色的名称

背景和/或前景

<Background> 和 <Foreground> 元素为 UI 元素的背景或前景定义颜色的值和类型。 这些元素没有子元素。

<Background Type="type" Source="int" />
<Foreground Type="type" Source="int" />
属性 定义
类型 [必需]颜色的类型。 它可以是下列项之一:

CT_INVALID: 颜色无效或未设置。

CT_RAW: 原始 ARGB 值。

CT_COLORINDEX: 请勿使用。

CT_SYSCOLOR: SysColor 中的 Windows 系统颜色。

CT_VSCOLOR: 来自__VSSYSCOLOREX的 Visual Studio 颜色。

CT_AUTOMATIC: 自动颜色。

CT_TRACK_FOREGROUND: 请勿使用。

CT_TRACK_BACKGROUND: 请勿使用。
来源 [必需]以十六进制形式表示的颜色的值

类型属性中的架构支持__VSCOLORTYPE枚举支持的所有值。 但是,我们建议仅使用CT_RAW和CT_SYSCOLOR。

一起

这是有效主题 .xml 文件的简单示例:

<Themes>
  <Theme Name="Light" GUID="{de3dbbcd-f642-433c-8353-8f1df4370aba}">
    <Category Name="MyCategory" GUID="{0A96238B-70CE-4479-9170-EECEAA3FCD58}">
      <Color Name="MyActiveBorder">
        <Background Type="CT_RAW" Source="FFCCCEDB" />
      </Color>
    </Category>
  </Theme>
</Themes>

如何使用该工具

语法

VsixColorCompiler <XML 文件><PkgDef 文件><可选 Args>

参数

开关名称 备注 必需或可选
未命名(.xml 文件) 这是第一个未命名的参数,是要转换的 XML 文件的路径。 必选
未命名 (.pkgdef 文件) 这是第二个未命名参数,是生成的 .pkgdef 文件的输出路径。

默认值:<XML Filename.pkgdef>
可选
/noLogo 设置此标志会停止打印产品和版权信息。 可选
/? 打印出帮助信息。 可选
/帮助 打印出帮助信息。 可选

Examples

  • VsixColorCompiler D:\xml\colors.xml D:\pkgdef\colors.pkgdef

  • VsixColorCompiler D:\xml\colors.xml /noLogo

注释

  • 此工具要求安装最新版本的 Microsoft Visual C++ Runtime。

  • 仅支持单个文件。 不支持通过文件夹路径进行批量转换。

  • 可以在 中找到该工具

示例输出

该工具生成的 .pkgdef 文件将类似于以下键:

[$RootKey$\Themes\{de3dbbcd-f642-433c-8353-8f1df4370aba}\Environment]
"Data"=hex:3a,00,00,00,0b,00,00,00,01,00,00,00,c3,d9,4e,62,fd,bd,fa,41,96,c3,7c,82,4e,a3,2e,3d,01,00,00,00,0c,00,00,00,41,63,74,69,76,65,42,6f,72,64,65,72,01,cc,ce,db,ff,01,33,31,24,ff

[$RootKey$\Themes\{de3dbbcd-f642-433c-8353-8f1df4370aba}\TreeView]
"Data"=hex:38,00,00,00,0b,00,00,00,01,00,00,00,8e,f0,ec,92,13,8b,f4,4c,99,e9,ae,26,92,38,21,85,01,00,00,00,0a,00,00,00,42,61,63,6b,67,72,6f,75,6e,64,01,f5,f5,f5,ff,01,1e,1e,1e,ff

更新主题以使用 Visual Studio 2026

可以更新使用 Visual Studio 2022 或更早版本的现有主题,以使用 Visual Studio 2026。 请参阅 将主题迁移到 Visual Studio 2026