Sdílet prostřednictvím


Uchovávání informací v projektech a řešeních

Doplňky Visual Studio jsou ve verzi aplikace Visual Studio 2013 zastaralé.Měli byste upgradovat doplňky na rozšíření VSPackage.Další informace o upgradu viz Nejčastější dotazy: Převádění doplňků na rozšíření VSPackage.

Při zavření projektu jsou uživatelská data, jako jsou hodnoty proměnných, zahozena, a to i v případě uložení řešení nebo projektu.Model automatizace Visual Studio však nabízí způsob, jak ukládat nebo zachovávat tato uživatelská data mezi relacemi integrovaného vývojového prostředí (IDE).To lze provést pomocí objektu Globals vlastnostmi Globals a Globals.Globals zachovává proměnné řešení a Globals zachovává proměnné projektu.Každá vlastnost vrátí objekt Globals, jehož členy umožňují ukládat, načítat, tvořit výčty a volitelně uchovávat data.Pokud tak učiníte, při příštím otevření projektu nebo řešení budou obnoveny hodnoty.

To je užitečné, například chcete-li povolit, aby příkaz nabízel trvalou výchozí hodnotu, nebo mu povolit změnit chování po jejím vyvolání po konkrétním počtu opakování.Doplňky také mohou tuto funkci použít k uchování dat a načtení dat ze souborů Solution (SLN).

Podrobnosti o chování globálního objektu

Pokud objekt Globals je spojen s IDE, pak hodnota přetrvá v jednom ze dvou míst.Pro Windows NT 4.0, Windows 2000 Professional a Windows Server 2003 jsou hodnoty uloženy v C:\winnt\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat.Pro Windows 95, Windows 98, Windows 98 Druhé vydání, Windows Millennium Edition, pokud je počítač nastaven pro přihlášení uživatele, hodnoty jsou uloženy v C:\Windows\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat.Jinak neexistuje žádný prvek <username>.Při každém zavření IDE nebo provedení operace Uložit vše rozhraní IDE zachová globální hodnoty.

Pokud objekt Globals je spojen s objektem Solution2, pak hodnota přetrvá v souboru .sln.Tyto hodnoty jsou trvalé při uložení souboru řešení.

Pokud objekt Globals je přiřazen k objektu Project, pak hodnota přetrvává v souboru projektu (.dsp, .vbp atd.).Kdykoli je projekt uložen, hodnoty jsou trvalé.

Hodnoty, které mají být uloženy jako řetězec, který lze zachovat – to znamená ne SAFEARRAY, objekt ani strukturované úložiště.Pokud proměnnou nelze převést na řetězec, hodnota anglického řetězce je trvalá, s vysvětlením, proč nebyla proměnná zachována.

Vždy, když jsou proměnné trvalé, je uložen nový záznam proměnných a jejich hodnot.

Trvale uchovávané globální hodnoty

Následující příklad makra ukazuje, jak použít objekt Globals a jeho členy k uchování hodnoty proměnné po zavření řešení a jak přistupovat k hodnotě, když znovu otevřete řešení.Počítá a vypíše počet načtení doplňku.

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

Viz také

Úkoly

Postupy: Přidávání a zpracování příkazů

Postupy: Vytvoření doplňku

Návod: Vytvoření průvodce

Koncepty

Graf modelu objektů automatizace

Další zdroje

Vytváření a řízení oken prostředí

Vytváření doplňků a průvodců

Referenční dokumentace automatizace a rozšíření