2017-09-25 87 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 *」不管你添加那裏。