【问题标题】:SettingsManager.GetWritableSettingsStore available for import/export in Visual Studio Extension?SettingsManager.GetWritableSettingsStore 可用于 Visual Studio 扩展中的导入/导出?
【发布时间】:2018-03-05 22:28:03
【问题描述】:

我在我的 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?

【问题讨论】:

  • 你试过ExternalSettingsManager(msdn.microsoft.com/en-us/library/…)吗?通过使用此类,您可以搜索不同范围内的属性和集合。它包含对 SettingsStore 类和 WritableSettingsStore 类的引用,用于进一步操作范围内的属性和集合。
  • @Wendy-MSFT 看起来这是您在拥有单独的应用程序外壳时使用的。您会调用什么方法来访问由 Import/Export 备份的设置?
  • GetReadOnlySettingsStore 为请求的范围提供 SettingsStore 类,可用于只读操作,GetWritableSettingsStore 为请求的范围提供 WritableSettingsStore 类,可用于读取操作和写入操作。我们可以使用这两种方法来获取所有只读和可写设置。
  • @Wendy-MSFT 我知道如何使用 SettingsStore,而且我已经在调用 GetWritableSettingsStore。我的问题是,当我使用它时,当我导出我的扩展程序的设置时,设置不会得到备份。

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


【解决方案1】:

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

public int MyProperty { get; set; }

在 OptionsDialogPage 上。

然而,这似乎是一个巨大的 hack,可能会在新版本的 VS 上中断。如果有人有,我希望有一个更优雅的解决方案。

还有一个非常奇怪需要注意的是,如果您在字符串设置的键名中包含“VisualStudio”,那么无论您在其中添加什么,它都会返回为“1*null*”。

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 2018-04-18
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多