支持用户设置

VSPackage 可以定义一个或多个设置类别,这些类别是用户选择“工具”菜单上的“导入/导出设置”命令时保留的状态变量组。 若要启用此持久性,请使用 Visual Studio SDK 中的设置 API。

称为“自定义设置点”和 GUID 的注册表项定义 VSPackage 的设置类别。 VSPackage 可以支持多个设置类别,每个类别由自定义设置点定义。

  • 基于互作程序集(使用 IVsUserSettings 接口)的设置实现应通过编辑注册表或使用注册器脚本(.rgs 文件)创建自定义设置点。 有关详细信息,请参阅 “创建注册器脚本”。

  • 使用托管包框架(MPF)的代码应为每个自定义设置点在 VSPackage 中附加一个 ProvideProfileAttribute,以创建自定义设置点。

    如果单个 VSPackage 支持多个自定义设置点,则每个自定义设置点由单独的类实现,每个自定义设置点都由类的唯一实例 ProvideProfileAttribute 注册。 实现设置的类可以支持多个设置类别。

自定义设置注册表条目详细信息

自定义设置点在以下位置的注册表项中创建:HKLM\Software\Microsoft\VisualStudio\<版本>\UserSettings\<CSPName>,其中<CSPName>是VSPackage支持的自定义设置点的名称,<版本>是Visual Studio的版本,例如8.0。

注释

在初始化 Visual Studio 集成开发环境(IDE)时,可以使用备用根路径覆盖 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\<Version> 的根路径。 有关详细信息,请参阅 命令行选项

注册表项的结构如下所示:

HKLM\Software\Microsoft\VisualStudio\Version<\>UserSettings\

<CSPName >= s '#12345'

软件包 = “{XXXXXX XXXX XXXX XXXX XXXXXXXXX}”

Category = '{YYYYYY YYYY YYYY YYYY YYYYYYYYY}'

ResourcePackage = "{ZZZZZZ ZZZZ ZZZZ ZZZZ ZZZZZZZZZ}"

AlternateParent = CategoryName

Name 类型 Data Description
(默认值) REG_SZ 自定义设置点的名称 密钥的名称 <CSPName>是自定义设置点的未本地化名称。

对于基于 MPF 的实现,密钥的名称是通过将构造函数的categoryNameobjectName参数合并为categoryName_objectName来获取的。

该键可以是空的,也可以包含附属 DLL 中本地化字符串的引用 ID。 此值从 objectNameResourceID 参数传递到 ProvideProfileAttribute 构造函数。
Package REG_SZ GUID 实现自定义设置点的 VSPackage 的 GUID。

基于 MPF 的ProvideProfileAttribute类的实现,通过使用包含 VSPackage 的objectType构造函数参数和反射来获取这个值。
类别 REG_SZ GUID 标识设置类别的 GUID。

对于基于互操作程序集的实现,此值可以是任意选择的 GUID,Visual Studio IDE 会将该 GUID 传递给 ExportSettingsImportSettings 方法。 这两种方法的所有实现都应验证其 GUID 参数。

对于基于 MPF 的实现,此 GUID 由 Type 实现 Visual Studio 设置机制的类获取。
ResourcePackage REG_SZ GUID 可选。

包含本地化字符串的附属 DLL 的路径,如果实现的 VSPackage 不提供本地化字符串。

MPF 使用反射来获取正确的资源 VSPackage,因此该 ProvideProfileAttribute 类不设置此参数。
AlternateParent REG_SZ 包含此自定义设置点的“工具选项”页下的文件夹的名称。 可选。

仅当设置实现支持使用 Visual Studio SDK 中的持久性机制的工具 选项 页而不是自动化模型中的机制保存状态时,才必须设置此值。

在这些情况下,AlternateParent 键中的值是用于标识特定 ToolsOptions 页面的topictopic.sub-topic字符串部分。 例如,对于 ToolsOptions"TextEditor.Basic" ,AlternateParent 的值将是 "TextEditor"

自定义设置点由 ProvideProfileAttribute 生成时,它与类别名称相同。