SettingsManager.GetWritableSettingsStore可用于Visual Studio扩展中的导入/导出?

时间:2017-09-25 02:52:43

标签: c# visual-studio-2017 visual-studio-extensions

我在Visual Studio扩展程序中使用SettingsManager来存储用户设置。

SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider.GlobalProvider);
var store = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);

我有一个自定义WPF选项页面as described in this post。我还想将我的扩展程序设置为使用导入/导出设置,因此我按照Creating an Options PageCreating 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中存储的所有数据均未显示。我正在查看ProvideProfileProvideOptionPage下的选项并尝试设置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?

1 个答案:

答案 0 :(得分:1)

我找到了办法。您需要写入与选项对话框类型的完整类型名称对应的集合路径。我是UnitTestBoilerplate.View.OptionsDialogPage,所以我使用了ApplicationPrivateSettings\UnitTestBoilerplate\View\OptionsDialogPage的收集路径。我还需要在选项对话框类型上创建一个虚拟属性,以欺骗VS实际导出设置。所以,如果我写信给MyProperty我需要

public int MyProperty { get; set; }

在OptionsDialogPage上。

然而,这似乎是一个巨大的黑客,可能会破坏新版本的VS.如果有人,我会喜欢更优雅的解决方案。

另外一个非常奇怪的警告是,如果你有" VisualStudio"在字符串设置的键名中,它返回为" 1 * null *"无论你在那里添加什么。