2017-09-25 239 views
8

我在我的Visual Studio扩展中使用SettingsManager来存储用户设置。SettingsManager.GetWritableSettingsStore可用于在Visual Studio Extension中导入/导出?

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,但这并没有帮助。

我该如何挂钩这两个系统?

(编辑)我跑进程监视器,发现设置管理钥匙在这里(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

您是否尝试过ExternalSettingsManager(https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.settings.externalsettingsmanager.aspx)?通过使用此类,您可以搜索不同范围内的属性和集合。它包含对SettingsStore类和WritableSettingsStore类的引用,以进一步处理作用域中的属性和集合。 –

+0

@ Wendy-MSFT它看起来像这是你有一个单独的应用程序外壳时使用。您将调用哪种方法来获取由导入/导出备份的设置? – RandomEngy

+0

GetReadOnlySettingsStore为请求的作用域提供SettingsStore类,该类可用于只读操作,GetWritableSettingsStore为请求的作用域提供WritableSettingsStore类,该类可用于读取操作和写入操作。我们可以使用这两种方法来获取所有只读和可写设置。 –

回答

1

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

public int MyProperty { get; set; } 

on OptionsDialogPage。

但是,这似乎是一个巨大的破解,可能会打破新版本的VS.如果有人拥有一个更优雅的解决方案,我很乐意。

另外一个非常奇怪需要注意的是,如果你有一个字符串设定键名“VisualStudio的”,它回来为“1个* NULL *”不管你添加那里。

相关问题