Partilhar via


Gerando informações persistentes em projetos e soluções

Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

Quando você fecha um projeto, os dados do usuário como valores de variáveis são descartados, mesmo que você salve a solução ou o projeto. O modelo de automação do Visual Studio, no entanto, oferece uma maneira de armazenar, ou persistir, tais dados do usuário entre sessões do IDE (ambiente de desenvolvimento integrado). Isso é feito usando o objeto Globals por meio das propriedades Globals e Globals. Globals mantém variáveis da solução e Globals mantém variáveis do projeto. Cada propriedade retorna um objeto de Globals cujos membros permitem que você armazene, recupere, enumere, e opcionalmente persista os dados. Quando você fizer isso, na próxima vez que abrir a solução ou o projeto, os valores serão restaurados.

Isso é útil, por exemplo, para permitir que um comando ofereça um valor padrão persistente, ou para permiti-lo alterar seu comportamento depois de ter sido invocado um número de vezes específico. Os suplementos também podem usar esse recurso para manter os dados e recuperar arquivos (.sln) da solução.

Detalhes globais do comportamento de objeto

Se o objeto de Globals estiver associado com a IDE, o valor persistirá 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 o computador estiver configurado para o logon de usuário, os valores são armazenados em C:\Windows\Profiles\<username>Application Data\Microsoft\Visual Studio\extglobal.dat. Do contrário, não haverá elemento <username>. Cada vez que a IDE é fechada ou a operação Salvar Tudo ocorre, a IDE persiste os valores globais.

Se o objeto de Globals estiver associado com o objeto de Solution2, o valor persistirá no arquivo .sln. Esses valores são persistidos quando o arquivo de solução é salvo.

Se o objeto de Globals estiver associado com um objeto de Project, o valor persistirá no arquivo de projeto (.dsp, .vbp, e assim por diante). Os valores são persistidos quando um projeto é salvo.

Os valores a serem armazenados devem ser como uma cadeia de caracteres que pode ser persistentes - isto é, não um SAFEARRAY, um objeto, ou um armazenamento estruturado. Se a variável não puder ser convertida em uma cadeia de caracteres, persistirá um valor de cadeia de caracteres inglês que explica o motivo da variável não ter persistido.

Sempre que as variáveis são mantidas, um novo registro das variáveis e seus valores é salvo.

Mantendo valores globais

O exemplo de macro a seguir mostra como usar o objeto Globals e seus membros para manter o valor de uma variável após uma solução ser fechada e como acessar o valor quando a solução for reaberta. Conta e exibe o número de vezes que o suplemento foi carregado.

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

Instruções passo a passo: criando um assistente

Conceitos

Gráfico do modelo de objetos automation

Outros recursos

Criando e controlando janelas de ambiente

Criando suplementos e assistentes

Referência sobre automação e extensibilidade