在本演练中,您可以创建 Visual Studio 设置类别并使用它来保存值以及从设置文件还原值。 类是显示相关属性的一组,当 “自定义下落点”;即为导入和导出设置 " 向导的复选框。 若要启动向导, 工具 菜单上,单击 导入和导出设置。 设置保存或恢复为类别,并且,各个设置该向导未显示。 有关更多信息,请参见 在 Visual Studio 中自定义开发设置。
托管包框架 (MPF)支持设置类别的创建用非常少附加的编码。 您创建 VSPackage 类别提供容器通过 subclassing Package 类。 您通过从派生来创建类别从 DialogPage 类。
备注
虽然 DialogPage 可以提供属性网格或自定义用户界面 (UI),设置管理器不使用任何。
若要开始本演练,必须先完成 演练:创建选项卡页的第一部分。 得到的可选特性网格可以检查和更改类别中的属性。 在保存在的属性类别设置文件后,将该文件以了解如何存储属性值。
系统必备
若要完成本演练,您必须安装 Visual Studio 2010 SDK。
备注
有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。
Visual Studio 包 " 项目模板的位置
Visual Studio 包 " 项目模板可以在 新项目 对话框的三个不同位置找到:
在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。
在 C# 扩展性下。 该项目的默认语言是 C#。
在其他项下键入扩展性。 该项的默认语言是 C++。
创建设置类别
使用 Visual Studio 包 " 项目模板,在本节中,将创建一组类别。 使用自定义下落点保存和还原设置类别的值。
创建设置类别
完成 演练:创建选项卡页的第一部分。
右击 MyToolsOptions 项目节点然后单击 设置为启动项目。
打开 VSPackage.resx 文件并将这三个字符串资源:
名称
值
106
我的类别
107
我的设置
108
OptionInteger 和 OptionFloat
这将创建名为 categories “我的类别”的资源,对象 “我的设置”和类别图例 “OptionInteger 和 OptionFloat”。
备注
这三,只有类别名称不出现在导入和导出设置 " 向导。
打开在 MyToolsOptions 项目的文件 MyToolsOptionsPackage.cs 或 MyToolsOptionsPackage.vb 并添加 float 名为的属性 OptionFloat 到 OptionPageGrid 类,如下面的示例所示。
Public Class OptionPageGrid Inherits DialogPage Private _optionInt As Integer = 256 Private _optionFloat As Single = 3.14F <Category("My Options")> <Description("My integer option")> Public Property OptionInteger() As Integer Get Return _optionInt End Get Set(ByVal value As Integer) _optionInt = value End Set End Property <Category("My Options")> <Description("My float option")> Public Property OptionFloat() As Single Get Return _optionFloat End Get Set(ByVal value As Single) _optionFloat = value End Set End Property End Class
public class OptionPageGrid : DialogPage { private int _optionInt = 256; private float _optionFloat = 3.14F; [Category("My Options")] [Description("My integer option")] public int OptionInteger { get { return _optionInt; } set { _optionInt = value; } } [Category("My Options")] [Description("My float option")] public float OptionFloat { get { return _optionFloat; } set { _optionFloat = value; } } }
备注
名为 “我的类别” OptionPageGrid 类现在包含两个特性、 OptionInteger 和 OptionFloat。
添加 ProvideProfileAttribute 到 MyToolsOptions 类并为其具有 “我的类别”,它 ObjectName “我的设置”,并将 IsToolsOptionPage 到 true. 设置 categoryResourceID、 objectNameResourceID 和 DescriptionResourceID 到已创建的相应字符串资源 ID 之前。
<ProvideProfileAttribute(GetType(OptionPageGrid), "My Category", "My Settings", 106, 107, True, DescriptionResourceID:=108)> <Guid(GuidList.guidMyToolsOptionsPkgString)> Public NotInheritable Class MyToolsOptions Inherits Package
[ProvideProfileAttribute( typeof(OptionPageGrid), "My Category", "My Settings", 106, 107, true, DescriptionResourceID = 108)] [Guid(GuidList.guidMyToolsOptionsPkgString)] public sealed class MyToolsOptions : Package
生成项目并验证它在编译时不会出错。
检查系统注册表
在本节中,将检查 ProvideProfileAttribute做的系统注册表项。
检查系统注册表
启动项目按 F5 调试模式。
这将启动 Visual Studio Exp 和写入 ProvideProfileAttribute 将参数传递到系统注册表。
备注
Visual Studio 的两个版本现在处于打开状态。
关闭 Visual Studio调试实例。
运行注册表编辑器并检查 HKCU 的 \Software\Microsoft\VisualStudio\10.0Exp_Config\UserSettings\MyCategory_MySettings 注册表项。 下表显示项的子项 (GUID 将不同)。
名称
数据
(默认值)
#107
类别
{} ba1e23e3-fecc-425d-8259-06c40cfac1b6
说明
#108
Package
{} a2192704-7d66-44b7-b61b-44ed96aace98
默认子项值 “#107”是指字符串资源 “我的设置”。 声明子键值 “#108”是指字符串资源 “OptionInteger 和 OptionFloat”。
更正系统注册表
在本节中,您将更正 ProvideProfileAttribute做的系统注册表项。
ProvideProfileAttribute 旨在写入非托管资源的资源 ID 传递到系统注册表。 Visual Studio 资源加载程序需要非托管资源 ID 具有数字值在后期 “#”和托管资源具有数字值不位于 “#”。 因此,必须删除 “#”托管资源 ID 的。
更正系统注册表
更正 HKLM 的 \Software\Microsoft\VisualStudio\8.0Exp\UserSettings\MyCategory_MySettings 注册表项通过删除 “#”从其数字子级。 下表显示项的子项 (GUID 将不同)。
名称
数据
(默认值)
107
类别
{} ba1e23e3-fecc-425d-8259-06c40cfac1b6
说明
108
Package
{} a2192704-7d66-44b7-b61b-44ed96aace98
ToolsOptionsPath
我的类别
右击注册表项并对文件 “settings.reg”导出它在 MyToolsOptions 项目文件夹。
关闭“注册表编辑器”。
右击 MyToolsOptions 项目节点并添加 “settings.reg”到项目中。
打开 VsPkg.cs 或 VsPkg.vb 和注释 ProvideProfileAttribute 及其参数。
'<ProvideProfileAttribute(GetType(OptionPageGrid), "My Category", "My Settings", 106, 107, True, DescriptionResourceID := 108)>
//[ProvideProfileAttribute( // typeof(OptionPageGrid), "My Category", "My Settings", // 106, 107, true, DescriptionResourceID = 108)]
这样可防止不正确的注册表项复盖到系统注册表。
右击 MyToolsOptions 项并单击 属性。
单击 生成操作 选项并添加以下 后期生成事件命令行。 必须包括 settings.reg 文件的完整路径 (路径可能不同)。
regedit /s D:\MyToolsOptions\MyToolsOptions\settings.reg
生成 MyToolsOptions 解决方案。 更正了数字子项将写入注册表中。
备注
,在创建最终 VSPackage 部署时,一注册表文件您还必须执行这些更正。
检查设置文件
在本节中,将设置文件导出特性分类值。 将该文件中导入值重新特性类。
检查设置文件
启动项目按 F5 调试模式。 这将启动 Visual Studio Exp。
备注
Visual Studio 的两个版本现在处于打开状态。
在 工具 菜单的 Visual Studio Exp,单击,选项。
将打开**“选项”**对话框。
在左窗格中的树视图,展开 我的类别 然后单击 我的网格页。
选项网格出现在右窗格中。 特性类是 我的选项,因此,属性名称与 OptionFloat 和 OptionInteger。
更改 OptionFloat 为 3.1416 和 OptionInteger 的值更改为 12。 单击**“确定”**。
在**“工具”菜单上单击“导入和导出设置”**。
导入和导出设置 出现向导。
确定 导出选定的环境设置 选中,然后单击 接下来。
选择设置导出 页。
单击 我的设置。
为 OptionInteger 和 OptionFloat的 声明 更改。
确保 我的设置 选中,然后单击 接下来。
给定一组文件 页。
将新的设置文件 MySettings.vssettings 并保存在相应的目录中。 单击**“完成”**。
完成导出 页报表设置成功导出的。
在**“文件”菜单上,指向“打开”,然后单击“文件”**。 找到 MySettings.vssettings 并将其打开。
可以找到您在文件的以下部分导出的属性类别 (GUID 将不同)。
<Category name="My Category_My Settings" Category="{4802bc3e-3d9d-4591-8201-23d1a05216a6}" Package="{6bb6942e-014c-489e-a612-a935680f703d}" RegisteredName="My Category_My Settings"> PackageName="Company.MyToolsOptions.MyToolsOptions, MyToolsOptions, Version=1.0.2251.20398, Culture=neutral, PublicKeyToken=d74639816260e962"> <PropertyValue name="OptionFloat">3.1416</PropertyValue> <PropertyValue name="OptionInteger">12</PropertyValue> </Category>
通知完整的类名称由一个下划线的向类名称的窗体中对象名后面。 OptionFloat 和 OptionInteger 显示在类别,与其导出的值。
关闭设置文件,而不更改它。
在 工具 菜单上,单击 选项,展开 我的类别,单击 我的网格页 然后将 OptionFloat 和 OptionInteger的值。 单击**“确定”**。
在 工具 菜单上,单击 导入和导出设置,选择 " 导入选定的环境设置,然后单击 接下来。
保存当前设置 页。
选择 不,导入新的设置 然后单击 接下来。
选择设置集合导入 页。
选择树视图中的 我的设置 节点的 MySettings.vssettings 文件。 如果文件不会出现在树视图中,单击 浏览 并找到它。 单击**“下一步”**。
选择设置导入 出现对话框。
确保 我的设置 选中,然后单击 完成。 当 完成导入 页出现时,单击 关闭。
在 工具 菜单上,单击 选项,展开 我的类别,单击 " 我的 网格页 并验证还原了属性类别值。