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>
Attribute 定义
名称 [必需]主题的名称
GUID [必需]主题的 GUID (必须与 GUID 格式匹配)

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

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

类别

<Category> 元素定义主题中的颜色集合。 类别名称提供逻辑分组,应尽可能窄地定义。 类别必须至少包含一个 <Color> 元素。 类别元素的定义如下所示:

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

颜色

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

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

背景和/或前景

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

<Background Type="type" Source="int" />
<Foreground Type="type" Source="int" />
Attribute 定义
类型 [必需]颜色的类型。 该参数可以是下列值之一:

CT_INVALID: 颜色无效或未设置。

CT_RAW: 原始 ARGB 值。

CT_COLORINDEX:请勿 U标准版。

CT_SYSCOLOR: SysColor 中的 Windows 系统颜色。

CT_VSCOLOR: 来自__VSSYSCOLOREX的 Visual Studio 颜色。

CT_AUTOMATIC: 自动颜色。

CT_TRACK_FOREGROUND:请勿 U标准版。

CT_TRACK_BACKGROUND:请勿 U标准版。
Source [必需]以十六进制形式表示的颜色的值

类型属性中的架构支持__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 设置此标志会停止打印产品和版权信息。 可选
/? 打印出帮助信息。 可选
/help 打印出帮助信息。 可选

示例

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

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

说明

  • 此工具要求安装最新版本的 VC++ 运行时。

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

  • 可以在 中找到该工具 <VS Install Path>\VSSDK\VisualStudioIntegration\Tools\Bin\

示例输出

该工具生成的 .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