visual-studio - tutorial - visual studio code español
¿Dónde debería un complemento de Visual Studio almacenar sus configuraciones? (2)
Actualmente estoy almacenando la configuración de mis complementos personalizados en el registro, pero esto parece un error. Me preguntaba si había un lugar oficial para almacenar configuraciones de complementos. Mi preferencia sería almacenarlas donde Visual Studio almacena la configuración para que puedan exportarse e importarse fácilmente.
¿Es posible almacenar configuraciones de complemento con la configuración de Visual Studio o hay una mejor manera?
Aquí hay un tutorial rápido que puede darle una idea de cómo lograrlo de manera simple (es bastante sencillo una vez que lo haya hecho una vez).
He derivado el siguiente código de lo que uso en mis extensiones ; está en VB.NET, pero puede convertirse fácilmente a C #.
Para comenzar, simplemente agregue esta clase a su proyecto de extensión. Debe contener una propiedad para cada valor que necesite almacenar. Incluso puedes organizarlos en categorías. Puede consultar MSDN aquí para ver los tipos admitidos (para casos más complejos, consulte las "páginas de opciones personalizadas", que es un tema que trata MSDN aquí ).
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
Luego, 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 paquete maestro:
Protected ReadOnly Property Settings() As OptionPageGrid
Get
Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
End Get
End Property
Esto permite acceder a un valor desde cualquier lugar de la clase con un amigo:
If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!");
Visual Studio se encargará de conservar la configuración, y deberían incluirse cuando use la función de importación / exportación (o cualquier extensión de sincronización de configuración como esta ).
EDITAR
Mi respuesta original a este tema tuvo un par de problemas que descubrí después de años de uso. Lo he incluido a continuación para completar, pero aquí están mis pensamientos actualizados sobre esto.
El uso de la configuración de la aplicación no es una versión segura en un VSIX. La ubicación de la ruta del archivo de configuración almacenada en parte incluye la cadena de versión y los hashes del ejecutable. Cuando Visual Studio instala una actualización oficial, estos valores cambian y, como consecuencia, cambian la ruta del archivo de configuración. Visual Studio en sí no admite el uso de la configuración de la aplicación, por lo que no intenta migrar este archivo a la nueva ubicación y toda la información se pierde esencialmente. El método de configuración admitido es WritableSettingsStore. Es muy similar a la configuración de la aplicación y es suficientemente fácil de acceder a través de SVsServiceProvider
public static WritableSettingsStore GetWritableSettingsStore(this SVsServiceProvider vsServiceProvider)
{
var shellSettingsManager = new ShellSettingsManager(vsServiceProvider);
return shellSettingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
}
Respuesta original
La forma más directa es usar la infraestructura de configuración de aplicaciones de .Net para almacenar cualquier configuración. Es un marco maduro con soporte de diseñador para agregar una infraestructura de configuración a su proyecto.
Sin embargo, no se integra con la infraestructura de configuración de Importar / Exportar de Visual Studio. Conseguir que eso funcione es un proceso muy complejo que incluye el registro de ti mismo como un paquete VS, la implementación de un esquema de configuración, etc. En general, creo que no vale la pena correr (nunca tuvo éxito)