Mantenimento delle informazioni in progetti e soluzioni

I componenti aggiuntivi di Visual Studio sono deprecati in Visual Studio 2013. Si consiglia di effettuare l'aggiornamento dei componenti aggiuntivi alle estensioni di VSPackage. Per ulteriori informazioni sull'aggiornamento, consultare Domande frequenti: conversione di componenti aggiuntivi in VSPackage Extensions.

Quando si chiude un progetto, i dati utente quali i valori variabili vengono eliminati, anche se si salva la soluzione o il progetto. Con il modello di automazione di Visual Studio, tuttavia, è possibile archiviare o rendere persistenti i dati utente tra una sessione e l'altra dell'ambiente di sviluppo integrato (IDE, Integrated Development Environment). Questa operazione può essere eseguita utilizzando l'oggetto Globals tramite le proprietà Globals e Globals. Globals mantiene le variabili della soluzione, mentre la proprietà Globals mantiene le variabili del progetto. Ogni proprietà restituisce un oggetto Globals i cui membri consentono di archiviare, recuperare, enumerare e, facoltativamente, rendere persistenti i dati. In questo modo, i valori verranno ripristinati alla successiva apertura della soluzione o del progetto.

Questo è utile, ad esempio, per consentire a un comando di rendere disponibile un valore predefinito persistente o di cambiarne il comportamento dopo che è stato chiamato un determinato numero di volte. Questa funzionalità può anche essere utilizzata dai componenti aggiuntivi per rendere persistenti e recuperare i dati contenuti nei file di soluzione (sln).

Informazioni dettagliate sul funzionamento dell'oggetto Global

Se l'oggetto Globals è associato all'IDE, il valore viene mantenuto in uno di due percorsi. I valori per Windows NT 4.0, Windows 2000 Professionale Windows Server 2003 vengono archiviati in C:\winnt\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat. I valori per Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition vengono archiviati in C:\Windows\Profiles\<username>\Application Data\Microsoft\Visual Studio\extglobal.dat se il computer è configurato per l’accesso dell’utente. Altrimenti, non esiste alcun elemento <username> . Ogni volta che l'IDE viene chiuso o viene eseguita un'operazione Salva tutto, l'IDE mantiene i valori globali.

Se l'oggetto Globals è associato all'oggetto Solution2, il valore viene mantenuto nel file sln. I valori vengono mantenuti quando viene salvato il file di soluzione.

Se l'oggetto Globals è associato a un oggetto Project, il valore viene mantenuto nel file di progetto (dsp, vbp e così via). I valori vengono mantenuti ogni volta che viene salvato un progetto.

I valori da archiviare devono presentare la forma di una stringa che è possibile mantenere, ovvero non si deve trattare di un SafeArray, di un oggetto o di un'archiviazione strutturata. Se la variabile non può essere convertita in una stringa, viene mantenuto un valore di stringa in lingua inglese in cui si informa che la variabile non è stata mantenuta.

Ogni volta che le variabili vengono mantenute, viene salvato un nuovo record contenente queste e i relativi valori.

Mantenimento di valori globali

Nell'esempio di macro riportato di seguito viene illustrato come utilizzare l'oggetto Globals e i relativi membri per mantenere il valore di una variabile dopo la chiusura di una soluzione e come accedere al valore alla riapertura della stessa. Viene conteggiato e visualizzato il numero di volte in cui il componente aggiuntivo è stato caricato.

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

Vedere anche

Attività

Procedura: aggiungere e gestire comandi

Procedura: creare un componente aggiuntivo

Procedura dettagliata: creazione di una procedura guidata

Concetti

Grafico del modello a oggetti di automazione

Altre risorse

Creazione e controllo delle finestre di ambiente

Creazione di componenti aggiuntivi e di procedure guidate

Riferimenti su Extensibility e automazione