6

In meiner Erweiterung, die ich für Visual Studio 2015 schreibe ich möchte die Tab-Größe und Einzug Größe ändern, wie bei der Arbeit haben wir eine andere Einstellung als wenn ich für Opensource-Projekt entwickeln (Firmengeschichte aus unserer C-Zeit). Ich habe den folgenden Code in meinem Kommando Klasse geschrieben:Schreiben von Visual Studio-Einstellungen in einer Erweiterung bleiben nicht

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

Wenn in einem experimentellen hive testen es es ändert sich, wenn Sie durch den Verfahrensschritt, aber wenn man die Optionen öffnen Dialog es die ursprünglichen Werte bleibt. Wenn Sie erneut debuggen, bleiben die Werte das Original.

Was habe ich vergessen oder falsch gemacht?

+0

Ich glaube, Sie müssen settingsStore.CommitChanges() oder so etwas tun. :) –

+0

@ Dr.Stitch, die nicht existiert. –

+0

Wie wäre es mit diesem "settingsStore.Settings.Default.Save();" ? Das tut mir leid. –

Antwort

4

Greifen Sie direkt auf die Visual Studio-Optionen über die Properties-Funktionalität in der EnvDTE-Baugruppe zu.

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

Zum Vergleich: Controlling Options Settings

+0

Dies funktioniert, wie diese Antwort ein wenig das gleiche ist http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-a-value-in-a-vspackage aber Die Änderungen bleiben nicht erhalten, wenn Sie Visual Studio neu starten. –

+0

Ich habe dies mit Visual Studio 2013 getestet. Und die geänderten Einstellungen bleiben nach dem Neustart von Visual Studio erhalten. – NineBerry

+0

Muss ein experimentelles Bienenstockproblem gewesen sein. Funktioniert jetzt. Sehen Sie, meine Antwort ist vollständig. (Dokument formatieren). –

1

auf Vollständigkeit. Das ist die richtige Antwort:

Im Konstruktor Sie

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

Und mit dem Befehl ist es wie dies

_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); 

Es ist ein Problem, dass die geändertenen Optionen hinzufügen müssen außer Kraft gesetzt werden die Standardwerte beim Neustart von Visual Studio.

+0

Sie sollten die Werte nicht mit dte.properties und settingsstore schreiben. Die Verwendung von dte.properties allein reicht aus. – NineBerry

+0

Ja, du hast Recht. Bearbeitete meine Antwort. –

Verwandte Themen