6

Nella mia estensione che sto scrivendo per Visual Studio 2015, desidero modificare le dimensioni della tabulazione e le dimensioni del rientro mentre sul lavoro abbiamo un'impostazione diversa come quando sto sviluppando per il progetto opensource (la storia dell'azienda risale al nostro periodo C). Ho scritto il seguente codice nella mia classe di comando:Scrivere le impostazioni di Visual Studio in un'estensione non rimanere

private const string CollectionPath = @"Text Editor\CSharp"; 
private void MenuItemCallback(object sender, EventArgs e) 
{ 
    var settingsManager = new ShellSettingsManager(ServiceProvider); 
    var settingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); 
    var tabSize = settingsStore.GetInt32(CollectionPath, "Tab Size", -1); 
    var indentSize = settingsStore.GetInt32(CollectionPath, "Indent Size", -1); 
    if (tabSize != -1 && indentSize != -1) 
    { 
    settingsStore.SetInt32(CollectionPath, "Tab Size", 2); 
    settingsStore.SetInt32(CollectionPath, "Indent Size", 2); 
    } 
} 

Durante il test in un alveare sperimentale cambia quando si passa tramite il metodo, ma quando si apre la finestra di dialogo Opzioni rimane i valori originali. Quando esegui di nuovo il debug, i valori rimangono l'originale.

Cosa ho dimenticato o fatto male?

+0

Credo che sia necessario eseguire settingsStore.CommitChanges() o qualcosa del genere. :) –

+0

@ Dr.Stitch che non esiste. –

+0

come su questo "settingsStore.Settings.Default.Save();" ? mi dispiace per quello. –

risposta

4

Accedere direttamente alle opzioni di Visual Studio tramite la funzionalità Properties nell'assieme EnvDTE.

private void ChangeTabs(DTE vs, int newTabSize, int newIndentSize) 
{ 
    var cSharp = vs.Properties["TextEditor", "CSharp"]; 

    EnvDTE.Property lTabSize = cSharp.Item("TabSize"); 
    EnvDTE.Property lIndentSize = cSharp.Item("IndentSize"); 

    lTabSize.Value = newTabSize; 
    lIndentSize.Value = newIndentSize; 
} 

private void ChangeSettings() 
{ 
    DTE vs = (DTE)GetService(typeof(DTE)); 
    ChangeTabs(vs, 3, 3); 
} 

Per riferimento: Controlling Options Settings

+0

Funziona come questa risposta è un po 'lo stesso http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-a-value-in-a-vspackage ma le modifiche non rimangono quando si riavvia Visual Studio. –

+0

Ho provato questo con Visual Studio 2013. E le impostazioni modificate sopravvivono dopo il riavvio di Visual Studio. – NineBerry

+0

Deve essere stato un problema di alveare sperimentale. Funziona ora. Vedi la mia risposta per essere completa. (Formato documento). –

1

Per essere completa. Questa è la risposta corretta:

Nel costruttore è necessario aggiungere

_dte2 = (DTE2) ServiceProvider.GetService(typeof (DTE)); 

E con il comando è come questo

_dte2.Properties["TextEditor", "CSharp"].Item("TabSize").Value = 2; 
    _dte2.Properties["TextEditor", "CSharp"].Item("IndentSize").Value = 2; 
    _dte2.Commands.Raise(VSConstants.CMDSETID.StandardCommandSet2K_string, (int)VSConstants.VSStd2KCmdID.FORMATDOCUMENT, null, null); 

C'è un problema che le opzioni modificate vengono sostituite con i valori predefiniti quando si riavvia Visual Studio.

+0

Non si dovrebbero scrivere i valori sia con dte.properties che con settingsstore. L'uso di dte.properties è sufficiente. – NineBerry

+0

Sì, hai ragione. Modificato la mia risposta. –

Problemi correlati