6

मेरे एक्सटेंशन में मैं विजुअल स्टूडियो 2015 के लिए लिख रहा हूं, मैं टैब आकार और इंडेंट आकार को काम के रूप में बदलना चाहता हूं क्योंकि हमारे पास एक अलग सेटिंग है जब मैं ओपनसोर्स प्रोजेक्ट के लिए विकास कर रहा हूं (कंपनी इतिहास हमारे सी अवधि डेटिंग)। मैं अपने आदेश वर्ग में निम्नलिखित कोड लिखा है:एक एक्सटेंशन में विजुअल स्टूडियो सेटिंग्स लिखना

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

जब एक प्रयोगात्मक छत्ता इसे बदल जाता है जब आप विधि के माध्यम से कदम लेकिन जब आप को खोलने के विकल्प यह मूल मूल्यों रहता संवाद में परीक्षण। जब आप फिर से डीबग करते हैं तो मान मूल रहते हैं।

मैंने क्या भूल या गलत किया?

+0

मेरा मानना ​​है कि आपको सेटिंग्स करने की आवश्यकता है Store.CommitChanges() या ऐसा कुछ। :) –

+0

@ डॉस्टीच जो मौजूद नहीं है। –

+0

इस "सेटिंग्सस्टोर.Settings.Default.Save();" के बारे में कैसे? ? उसके लिए माफ़ करना। –

उत्तर

4

एनवीडीटीई असेंबली में Properties कार्यक्षमता के माध्यम से सीधे विजुअल स्टूडियो विकल्पों तक पहुंचें।

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

संदर्भ के लिए: Controlling Options Settings

+0

यह काम करता है क्योंकि यह उत्तर थोड़ा सा है http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-a-value-in-a-vspackage लेकिन जब आप विजुअल स्टूडियो को पुनरारंभ करते हैं तो परिवर्तन नहीं रहते हैं। –

+0

मैंने विजुअल स्टूडियो 2013 के साथ इसका परीक्षण किया है। और विजुअल स्टूडियो को पुनरारंभ करने के बाद बदली गई सेटिंग्स जीवित रहती हैं। – NineBerry

+0

एक प्रयोगात्मक हाइव मुद्दा होना चाहिए। अब काम करता है पूरा होने के लिए मेरा जवाब देखें। (प्रारूप दस्तावेज)। –

1

पूरा होने के लिए।

निर्माता आप

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

जोड़ने के लिए और आदेश के साथ इस

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

की तरह है एक मुद्दा है कि बदली हुई विकल्पों के साथ अधिरोहित कर रहे हैं नहीं है जरूरत में: यह सही जवाब है जब आप विजुअल स्टूडियो को पुनरारंभ करते हैं तो डिफ़ॉल्ट।

+0

आपको दोनों dte.properties और सेटिंग्सस्टोर के साथ मान नहीं लिखना चाहिए। अकेले dte.properties का उपयोग करना पर्याप्त है। – NineBerry

+0

हाँ आप सही हैं। मेरा जवाब संपादित किया। –

संबंधित मुद्दे