Informações persistentes em projetos e soluções

Quando você fecha um projeto, os dados do usuário, como valores de variáveis são descartadas, mesmo que você salve a solução ou projeto.O Visual Studio modelo de automação, no entanto, oferece uma maneira de armazenar ou persistirem, tais dados de usuário entre sessões do ambiente de desenvolvimento integrado (IDE).Isso é realizado usando o Globals de objeto por meio do Globals e Globals propriedades.Globalsvariáveis de solução de persistir e Globalspersistir variáveis do projeto.Cada propriedade que retorna um Globals cujos membros permitem armazenar, recuperar, enumerar e, opcionalmente, manter os dados do objeto.Ao fazer isso, na próxima vez que você abre a solução ou projeto, os valores são restaurados.

Isso é útil, por exemplo, para permitir que um comando oferecer um valor padrão persistente, ou permitir que ele altere seu comportamento após ele ter sido chamado um número específico de vezes.Add-ins também pode usar esse recurso para persistir dados e recuperar dados de arquivos de solução (. sln).

Detalhes de comportamento do objeto global

Se a Globals o objeto está associado com o IDE, em seguida, o valor será mantido em um dos dois locais.Para Windows NT 4.0, Windows 2000 Professional, e Windows Server 2003, os valores são armazenados em C:\winnt\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat.Para Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, se a máquina está configurado para logon de usuário, os valores são armazenados em C:\Windows\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat.Caso contrário, não há nenhum <username> elemento.Toda vez que o IDE está fechado ou uma operação de salvar tudo ocorre, o IDE persiste os valores globais.

Se a Globals objeto é associado a Solution2 de objeto, e em seguida, o valor persiste no arquivo. sln.Esses valores são mantidos quando o arquivo de solução é salvo.

Se a Globals objeto é associado um Project de objeto, e em seguida, o valor persiste no arquivo de projeto (.dsp,. vbp e assim por diante).Os valores são mantidos sempre que um projeto é salvo.

Valores a serem armazenados devem ser como uma seqüência de caracteres que pode ser mantida — ou seja, não um SAFEARRAY, objeto ou armazenamento estruturado.Se a variável não pode ser convertida para uma seqüência de caracteres, um valor de seqüência de caracteres em inglês é persistente que explica por que a variável não foi mantida.

Sempre que as variáveis são persistentes, um novo registro de variáveis e seus valores é salvos.

96t389k3.collapse_all(pt-br,VS.110).gifValores globais persistentes

O exemplo de macro a seguir mostra como usar o Globals objeto e seus membros para reter o valor de uma variável depois que uma solução for fechada e como acessar o valor quando a solução é reaberta.Ele conta e o número de vezes que o suplemento foi carregado de saídas.

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

Consulte também

Tarefas

Como: adicionar e manipular comandos

Como: criar um suplemento

Passo a passo: Criando um assistente

Conceitos

Gráfico de modelo de objeto de automação

Outros recursos

Criar e controlar o ambiente Windows

A criação de suplementos e assistentes

Automação e extensibilidade referência