Persistente Daten in Projekten und Projektmappen

Add-Ins für Visual Studio sind in Visual Studio 2013 veraltet. Sie müssen für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen. Weitere Informationen über das Durchführen eines Upgrades finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.

Wenn Sie ein Projekt schließen, werden die Benutzerdaten (z. B. die Variablenwerte) verworfen, selbst wenn Sie die Projektmappe oder das Projekt speichern. Das Automatisierungsmodell von Visual Studio bietet jedoch eine Möglichkeit zum Speichern und Beibehalten dieser Benutzerdaten zwischen den Sitzungen der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE). Dies wird unter Verwendung des Globals-Objekts durch die Globals-Eigenschaft und die Globals-Eigenschaft erreicht. Globals behält die Projektmappenvariablen bei. Globals behält die Projektvariablen bei. Jede Eigenschaft gibt ein Globals-Objekt zurück, mit dessen Membern Sie die Daten speichern, abrufen, auflisten und optional beibehalten können. Durch diesen Vorgang werden beim nächsten Öffnen der Projektmappe oder des Projekts die Werte wiederhergestellt.

Dies ist z. B. sinnvoll, um für einen Befehl stets denselben Standardwert zu verwenden oder das Verhalten eines Befehls nach einer bestimmten Anzahl von Aufrufen zu ändern. Dieses Feature kann auch von Add-Ins verwendet werden, um Daten von Projektmappendateien (SLN-Dateien) beizubehalten und abzurufen.

Einzelheiten zum Verhalten von Global-Objekten

Wird das Globals-Objekt zur IDE zugeordnet, wird der Wert in einem von zwei Speicherorten beibehalten. Für Windows NT 4.0, Windows 2000 Professional und Windows Server 2003 werden die Werte in "C:\winnt\Profiles\<username>\Anwendungsdaten\Microsoft\Visual Studio\extglobal.dat" gespeichert. Für Windows 95, Windows 98, Windows 98 Zweite Ausgabe, Windows Millennium Edition werden die Werte in "C:\Windows\Profiles\<username>\Anwendungsdaten\Microsoft\Visual Studio\extglobal.dat" gespeichert, wenn der Computer für eine Benutzeranmeldung eingerichtet wurde. Andernfalls gibt es kein Element <username>. Jedes Mal, wenn die IDE geschlossen wird oder die Operation Alles Speichern auftritt, behält die IDE die globalen Einstellungen bei.

Wird das Globals-Objekt dem Solution2-Objekt zugeordnet, wird der Wert in der SLN-Datei beibehalten. Diese Werte werden beim Speichern der Projektmappendatei beibehalten.

Wird das Globals-Objekt dem Project-Objekt zugeordnet, wird der Wert in der Projektdatei (DSP, VBP usw.) beibehalten. Die Werte werden bei jedem Speichern des Projekts beibehalten.

Die zu speichernden Werte werden in eine Zeichenfolge konvertiert, die beibehalten werden kann, d. h., sie dürfen kein SAFEARRAY, Objekt oder strukturierter Speicher sein. Wenn die Variable nicht in eine Zeichenfolge konvertiert werden kann, wird eine entsprechende Begründung als Zeichenfolgenwert beibehalten.

Immer wenn Variablen beibehalten werden, wird ein Datensatz dieser Variablen und ihrer Werte gespeichert.

Beibehalten von globalen Werten

Im folgenden Makrobeispiel wird die Verwendung des Globals-Objekts und seiner Member veranschaulicht, um den Wert einer Variablen beizubehalten, nachdem die Projektmappe geschlossen wurde. Danach wird der Zugriff auf diesen Wert dargestellt, nachdem die Projektmappe erneut geöffnet wurde. Im Beispiel wird festgehalten, wie oft das Add-In geladen wurde, und die Anzahl wird ausgegeben.

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.");
}

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen und Ändern von Befehlen

Gewusst wie: Erstellen von Add-Ins

Exemplarische Vorgehensweise: Erstellen eines Assistenten

Konzepte

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen und Steuern von Umgebungsfenstern

Erstellen von Add-Ins und Assistenten

Referenz zur Automatisierung und Erweiterbarkeit