visual tutorial temas studio para mejores las iconos extensiones español configurar code visual-studio visual-studio-2010 settings add-in

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)