Вот краткое руководство, которое может дать вам представление о том, как этого добиться просто (это довольно просто, если вы сделали это один раз).
Я получил следующий код из того, что я использую в моих расширениях ; это в VB.NET, но может быть легко преобразовано в C #.
Для начала просто добавьте этот класс в свой проект расширения. Он должен содержать свойство для каждого значения, которое вам нужно хранить. Вы даже можете распределить их по категориям. Вы можете посмотреть на MSDN здесь для поддерживаемых типов (для более сложных случаев вы можете обратиться к "настраиваемым страницам опций", которые являются темой MSDN здесь ).
Imports Microsoft.VisualBasic
Imports System
Imports System.Diagnostics
Imports System.Globalization
Imports System.Runtime.InteropServices
Imports System.ComponentModel.Design
Imports Microsoft.Win32
Imports Microsoft.VisualStudio
Imports Microsoft.VisualStudio.Shell.Interop
Imports Microsoft.VisualStudio.OLE.Interop
Imports Microsoft.VisualStudio.Shell
Imports System.Threading
Imports System.Text.RegularExpressions
Imports System.ComponentModel
<ClassInterface(ClassInterfaceType.AutoDual)>
<CLSCompliant(False), ComVisible(True)>
Public Class OptionPageGrid
Inherits DialogPage
Private _MyBooleanSetting As Boolean = False
<Category("The name or an alias of my extension name")>
<DisplayName("Simple name of this setting displayed for the user")>
<Description("Longer description of this setting")>
Public Property MyBooleanSetting() As Boolean
Get
Return Me._MyBooleanSetting
End Get
Set(ByVal value As Boolean)
Me._MyBooleanSetting = value
End Set
End Property
Private _MyIntegerSetting As Integer = 2
<Category("The name or an alias of my extension name")>
<DisplayName("Simple name of this setting displayed for the user")>
<Description("Longer description of this setting")>
Public Property MyIntegerSetting() As Integer
Get
Return Me._MyIntegerSetting
End Get
Set(ByVal value As Integer)
Me._MyIntegerSetting = value
End Set
End Property
Private _MyStringSetting As String = "DefaultStringValue"
<Category("The name or an alias of my extension name")>
<DisplayName("Simple name of this setting displayed for the user")>
<Description("Longer description of this setting")>
Public Property MyStringSetting() As Integer
Get
Return Me._MyStringSetting
End Get
Set(ByVal value As Integer)
Me._MyStringSetting = value
End Set
End Property
End Class
Затем добавьте следующие атрибуты непосредственно перед вашим классом мастер-пакета.
<ProvideOptionPage(GetType(OptionPageGrid), "The name or an alias of my extension name", "The name of a category of settings", 0, 0, True)>
Public NotInheritable Class MyExtensionMainClass
Inherits Package
Теперь, чтобы легко получить доступ к настройкам, вы можете добавить следующее свойство в свой класс мастер-пакета:
Protected ReadOnly Property Settings() As OptionPageGrid
Get
Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
End Get
End Property
Это позволяет получить доступ к значению из любой точки класса с помощью дружественного:
If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!");
Visual Studio позаботится о сохранении настроек, и они должны быть включены при использовании функции импорта / экспорта (или любого расширения синхронизации настроек, например , ).