Voici un petit tutoriel cela peut vous donner une idée de la façon d'y parvenir simplement (c'est assez simple une fois que vous l'avez fait une fois).
J'ai dérivé le code ci-dessous de ce que j'utilise dans my extensions; il est dans VB.NET, mais peut être facilement converti en C#. Pour commencer, ajoutez simplement cette classe à votre projet d'extension. Il doit contenir une propriété pour chaque valeur que vous devez stocker. Vous pouvez même les organiser en catégories. Vous pouvez regarder at MSDN here pour les types pris en charge (pour les cas plus complexes, vous pouvez vous référer à "pages d'options personnalisées", qui est un sujet couvert 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
Ensuite, ajoutez les attributs suivants juste avant votre classe de package principal.
<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
Maintenant, pour accéder facilement aux paramètres, vous pouvez ajouter la propriété suivante dans votre classe de carton d'emballage:
Protected ReadOnly Property Settings() As OptionPageGrid
Get
Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
End Get
End Property
Cela permet d'accéder à une valeur de partout dans la classe en utilisant un match amical:
If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!");
Visual studio se chargera de la persistance des paramètres, et ils devraient être inclus lorsque vous utilisez la fonction d'importation/exportation (ou toute extension de synchronisation des paramètres comme this one).
Je ne suis peut-être pas à l'aise car c'est la première fois que j'essaie de le faire, mais la seule façon de pouvoir utiliser votre nouveau code est de changer le type de paramètre de SVsServiceProvider à IServiceProvider. – jschroedl