Aquí hay un breve tutorial eso puede darle una idea de cómo lograr esto simplemente (es bastante sencillo una vez que lo haya hecho una vez).
He derivado el siguiente código de lo que uso en my extensions; está en VB.NET, pero se puede convertir fácilmente en C#.
Para comenzar, simplemente agregue esta clase a su proyecto de extensión. Debe contener una propiedad para cada valor que necesita almacenar. Incluso puedes organizarlos en categorías. Puede tener un vistazo at MSDN here para los tipos admitidos (para casos más complejos puede consultar "páginas de opciones personalizadas", que es un tema cubierto by MSDN here).
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
A continuación, agregue los siguientes atributos justo antes de su clase de paquete maestro.
<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
Ahora para acceder fácilmente a la configuración, puede agregar la siguiente propiedad en su clase de cartón de envase:
Protected ReadOnly Property Settings() As OptionPageGrid
Get
Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
End Get
End Property
Esto hace que sea posible el acceso a un valor desde cualquier lugar de la clase utilizando un amistoso:
If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!");
Visual Studio se hará cargo de la persistencia de la configuración, y deben ser incluidos cuando se utiliza la función de importación/exportación (o cualquier extensión ajustes de sincronización como this one).
Puedo estar muy lejos ya que esta es la primera vez que intento esto, pero la única forma en que parezco poder usar su código más nuevo es cambiar el tipo de parámetro de SVsServiceProvider a IServiceProvider. – jschroedl