6

W moim rozszerzeniu, które piszę dla Visual Studio 2015, chcę zmienić rozmiar tabulatora i wielkość wcięcia, ponieważ w pracy mamy inne ustawienie, jak gdy pracuję nad projektem opensource (historia firmy datująca nasz okres C). Napisałem następujący kod w mojej klasie polecenia:Zapisywanie ustawień Visual Studio w rozszerzeniu nie pozostaje

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

Podczas testowania w ulu eksperymentalnej to zmienia go, gdy krok po kroku metody, ale po otwarciu Opcje dialogowe pozostaje oryginalne wartości. Po ponownym debugowaniu wartości pozostają oryginalne.

Co zapomniałem lub zrobiłem źle?

+0

Wierzę, że musisz zrobić settingsStore.CommitChanges() lub coś w tym stylu. :) –

+0

@ Dr.Stitch, który nie istnieje. –

+0

jak o tym "settingsStore.Settings.Default.Save();" ? przepraszam za to. –

Odpowiedz

4

Bezpośredni dostęp do opcji Visual Studio za pomocą funkcji Properties w zespole 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); 
} 

Dla porównania: Controlling Options Settings

+0

Ta odpowiedź brzmi tak samo http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-in-a-spackage, ale zmiany nie zostaną wprowadzone po ponownym uruchomieniu programu Visual Studio. –

+0

Testowałem to z Visual Studio 2013. Zmienione ustawienia przetrwają po ponownym uruchomieniu Visual Studio. – NineBerry

+0

To musiało być eksperymentalne zagadnienie ula. Działa teraz. Zobacz, jak moja odpowiedź jest kompletna. (Formatuj dokument). –

1

jest kompletna. To jest poprawna odpowiedź:

W konstruktorze trzeba dodać

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

I z poleceniem to jest jak to

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

Jest to problem, który zmienione opcje są nadpisywane z wartości domyślne po ponownym uruchomieniu programu Visual Studio.

+0

Nie powinieneś zapisywać wartości zarówno w dte.properties, jak i settingsstore. Samo używanie dte.properties wystarczy. – NineBerry

+0

Tak, masz rację. Zmieniono moją odpowiedź. –

Powiązane problemy