【发布时间】: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 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?
【问题讨论】:
-
你试过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