Guardar información en proyectos y soluciones
Cuando se cierra un proyecto, los datos de usuario, como los valores de variables, se descartan, aunque se guarde la solución o el proyecto. Sin embargo, el modelo de automatización de Visual Studio constituye una forma de almacenar o conservar estos datos entre sesiones del entorno de desarrollo integrado (IDE). Esto se logra mediante el uso del objeto Globals a través de las propiedades Globals y Globals. Globals conserva las variables de la solución y Globals, las variables del proyecto. Cada propiedad devuelve un objeto Globals cuyos miembros permiten almacenar, recuperar, enumerar y, opcionalmente, conservar los datos. De esta forma, la próxima vez que se abra la solución o el proyecto, se restauran los valores.
Esto es útil, por ejemplo, para permitir que un comando proporcione siempre el mismo valor predeterminado, o para permitir que cambie su comportamiento después de invocarlo un número específico de veces. Esta característica se puede utilizar también en complementos para conservar y recuperar datos de archivos de solución (.sln).
Detalles de comportamiento del objeto Globals
Si el objeto Globals se asocia con el IDE, el valor se conserva en alguna de las siguientes ubicaciones. Para Windows NT 4.0, Windows 2000 Professionaly Windows Server 2003, los valores se almacenan en C:\winnt\Profiles\< nombre de usuario >\Application Data\Microsoft\Visual Studio\extglobal.dat. Para Windows 95, Windows 98, Windows 98 Segunda edición, Windows Millennium Edition, si el equipo está configurado para inicio de sesión de usuario, los valores se almacenan en C:\Windows\Profiles\< nombre de usuario >\Application Data\Microsoft\Visual Studio\extglobal.dat. De lo contrario, no habrá ningún elemento < nombre de usuario >. Cada vez que se cierra el IDE o tiene lugar una operación Guardar todo, el IDE conserva los valores globales.
Si el objeto Globals se asocia con el objeto Solution2, el valor se conserva en el archivo .sln. Los valores se conservan cuando se guarda el archivo de solución.
Si el objeto Globals se asocia con un objeto Project, el valor se conserva en el archivo del proyecto (.dsp, .vbp, etc.). Los valores se conservan cada vez que se guarda un proyecto.
Los valores que se van a almacenar deben como una cadena que se pueda conservar; es decir, no puede ser un SAFEARRAY, objeto ni almacenamiento estructurado. Si la variable no puede convertirse en cadena, se conserva una cadena en inglés que explica el motivo por el que no se ha conservado la variable.
Cada vez que se conservan variables, se guarda un nuevo registro de las variables y sus valores.
Conservar valores globales
En el siguiente ejemplo de macro se muestra cómo utilizar el objeto Globals y sus miembros para conservar el valor de una variable después de cerrar una solución y cómo tener acceso a dicho valor cuando se vuelve a abrir la solución. El objeto cuenta y genera el número de veces que se ha cargado el complemento.
Sub OnAddinLoaded(ByVal dte As DTE)
' Count the number of times an add-in is loaded
' and store the value in the solution.
Dim globals As Globals
globals = dte.Solution.Globals
If globals.VariableExists("AddinLoadCounter") Then
' The counter has already been set, so increment it.
Dim int32 As System.Int32
int32 = System.Int32.Parse(CStr(globals("AddinLoadCounter")))
int32 += 1
globals("AddinLoadCounter") = int32.ToString()
Else
' Counter has never been set, so create and initialize it.
globals("AddinLoadCounter") = 1.ToString()
globals.VariablePersists("AddinLoadCounter") = True
End If
MsgBox("This add-in has been loaded: " & _
globals.VariableValue("AddinLoadCounter") & " times.")
End Sub
void OnAddinLoaded(_DTE applicationObject)
{
// Count the number of times an add-in is loaded
// and store the value in the solution.
Globals globals;
globals = applicationObject.Solution.Globals;
if(globals.get_VariableExists("AddinLoadCounter"))
{
// The counter has already been set, so increment it.
System.Int32 int32;
int32 = System.Int32.Parse((string)
globals["AddinLoadCounter"]);
int32++;
globals["AddinLoadCounter"] = int32.ToString();
}
else
{
// Counter has never been set, so create and initialize it.
globals["AddinLoadCounter"] = 1.ToString();
globals.set_VariablePersists("AddinLoadCounter", true);
}
System.Windows.Forms.MessageBox.Show("This add-in has been loaded:
" + globals.VariableValue["AddinLoadCounter"] + " times.");
}
Vea también
Tareas
Cómo: Agregar y controlar comandos
Conceptos
Gráfico del modelo de objetos de automatización
Otros recursos
Crear y controlar las ventanas del entorno