我在Visual Studio扩展程序中使用SettingsManager
来存储用户设置。
SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider.GlobalProvider);
var store = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
我有一个自定义WPF选项页面as described in this post。我还想将我的扩展程序设置为使用导入/导出设置,因此我按照Creating an Options Page和Creating a Settings Category页面将其添加到我的包属性中:
[ProvideProfile(typeof(OptionsDialogPage), "Unit Test Boilerplate Generator", "Unit Test Boilerplate Generator Settings", 106, 107, true, DescriptionResourceID = 108)]
[ProvideOptionPage(typeof(OptionsDialogPage), "Unit Test Boilerplate Generator", "Templates", 101, 109, supportsAutomation: true)]
我成功地将其显示为导入/导出设置下的标题,但导出后,SettingsManager
中存储的所有数据均未显示。我正在查看ProvideProfile
和ProvideOptionPage
下的选项并尝试设置SupportsProfiles = true
,但这没有帮助。
如何挂起这两个系统?
(编辑)我运行了Process Monitor并在此处找到了SettingsManager键(CollectionPath UnitTestBoilerplateGenerator):
\REGISTRY\A\{08894cfc-f3a9-f49b-133e-3453dfe7a27d}\Software\Microsoft\VisualStudio\15.0_a703f143Exp\UnitTestBoilerplateGenerator\Template_VisualStudio_Moq_File
此处存储的内置选项(来自其他扩展程序的示例):
\REGISTRY\A\{22e40365-b8e3-e9b2-1315-55021a1e4c3d}\Software\Microsoft\VisualStudio\15.0_a703f143\ApplicationPrivateSettings\Xavalon\XamlStyler\Core\Options\StylerOptions\NoNewLineElement
所以看起来它们存放在不同的区域。有没有办法以编程方式编写这些内置选项或在导入/导出中包含自定义CollectionPath?
答案 0 :(得分:1)
我找到了办法。您需要写入与选项对话框类型的完整类型名称对应的集合路径。我是UnitTestBoilerplate.View.OptionsDialogPage
,所以我使用了ApplicationPrivateSettings\UnitTestBoilerplate\View\OptionsDialogPage
的收集路径。我还需要在选项对话框类型上创建一个虚拟属性,以欺骗VS实际导出设置。所以,如果我写信给MyProperty
我需要
public int MyProperty { get; set; }
在OptionsDialogPage上。
然而,这似乎是一个巨大的黑客,可能会破坏新版本的VS.如果有人,我会喜欢更优雅的解决方案。
另外一个非常奇怪的警告是,如果你有" VisualStudio"在字符串设置的键名中,它返回为" 1 * null *"无论你在那里添加什么。