VisualStudio 使用 DialogPage 存储配置信息
最近在使用和修改VisualStudio扩展插件 CopyWithLocation (该插件功能为:复制代码时自动带上方法名、类名等,本人略作修改,添加带上命名空间功能)时留意到它的配置选项功能,由于该插件比较简单,所以正好借此研究一下VS插件的配置选项功能如何实现。
我在该插件的原有的相关功能处添加了一个”Test”项,以测试该功能,完整代码如下:
public class CopyWithLocationOptions : DialogPage { [DisplayName("Method copy format")] [Description("Use \"{0}.{1}.{2} [{3}] \\r\\n{4}\" to copy method like \"NameSpace.MyClass.MyMethod [LineStart-LineEnd] \r\n Selected code\"")] public string MethodCopyFormat { get; set; } [DisplayName("Class copy format")] [Description("Use \"{0}.{1} [{3}] \\r\\n{4}\" to copy class like \"NameSpace.MyClass [LineStart-LineEnd] \r\n Selected code\"")] public string ClassCopyFormat { get; set; } [DisplayName("Code block copy format")] [Description("Use \"{1}\\{2} [{3}] \\r\\n{4}\" to copy code block like \"FilePath\\FileName [LineStart-LineEnd] \r\n Selected code\"")] public string CodeBlockCopyFormat { get; set; } [DisplayName("配置项名称")] [Description("配置项介绍")] public string Test { get; set; } public override void ResetSettings() { MethodCopyFormat = null; ClassCopyFormat = null; CodeBlockCopyFormat = null; base.ResetSettings(); } protected override void OnActivate(CancelEventArgs e) { LoadDefaultSettingsIfNecessary(); base.OnActivate(e); } public void LoadDefaultSettingsIfNecessary() { MethodCopyFormat = string.IsNullOrEmpty(MethodCopyFormat) ? "{0}.{1}.{2} [{3}] \r\n{4}" : MethodCopyFormat; ClassCopyFormat = string.IsNullOrEmpty(ClassCopyFormat) ? "{0}.{1} [{3}] \r\n{4}" : ClassCopyFormat; CodeBlockCopyFormat = string.IsNullOrEmpty(CodeBlockCopyFormat) ? "{1}\\{2} [{3}] \r\n{4}" : CodeBlockCopyFormat; Test = string.IsNullOrEmpty(Test) ? "配置项默认值" : Test; } }
效果(点击VS菜单栏”工具”->”选项”):
分析:
只需添加一个类(应该是组件类模板,不过我是通过普通类模板创建的,也行),继承 Microsoft.VisualStudio.Shell.DialogPage 类,然后设置一个公共属性,即可作为一个配置项,可自动存取配置信息。
[DisplayName("配置项名称")] [Description("配置项介绍")] public string Test { get; set; }
可在重写的 OnActivate 方法中对配置项的值进行初始化,比如为空时设置一个默认值,这样用户删除配置项的值,保存后重新打开设置窗口就可以获取默认值了。
Test = string.IsNullOrEmpty(Test) ? "配置项默认值" : Test;
然后需要在 XXXPackage.cs 文件中,使用 ProvideOptionPage 特性来指定配置页:
[ProvideOptionPage(typeof(NoteExtensionsOptions), "NoteExtensionsOptions Category", "NoteExtensionsOptions Page", 1000, 1001, true)] public sealed class Command1Package : Package{//...}
第一个参数指定配置项设置类,第二个参数是配置项名字,第三个参数是配置页(放在配置项下的)名字,效果:
可以设置多个ProvideOptionPage来组织配置页面:
[ProvideOptionPage(typeof(NoteExtensionsOptions), "NoteExtensionsOptions Category", "NoteExtensionsOptions Page", 1000, 1001, true)] [ProvideOptionPage(typeof(NoteExtensionsOptions), "NoteExtensionsOptions Category", "NoteExtensionsOptions Page 2", 1000, 1001, true)] [ProvideOptionPage(typeof(NoteExtensionsOptions), "NoteExtensionsOptions Category 2", "NoteExtensionsOptions Page", 1000, 1001, true)] public sealed class Command1Package : Package
效果:
最后,使用 Category 特性设置配置类里的属性可进行配置项的分组,未设置则分到”杂项”组:
[Category("设置项类别")] [DisplayName("设置项1")] [Description("描述1")] public string MethodCopyFormat { get; set; } [DisplayName("设置项2")] [Description("描述2")] public string ClassCopyFormat { get; set; } [DisplayName("设置项3")] [Description("描述3")] public string CodeBlockCopyFormat { get; set; }
效果:
好了,就说这么多吧。网上这方面的内容还是比较少的,希望大家多多交流。
原创文章,转载请注明: 转载自 独立观察员(dlgcy.com)
本文链接地址: [VisualStudio 使用 DialogPage 存储配置信息](https://dlgcy.com/visualstudio-use-dialogpage/)
关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章
发表评论