6

Visual Studio 2015 için yazdığım uzantımda İşyerinde olduğu gibi sekme boyutunu ve girinti boyutunu değiştirmek istiyorum. Açık kaynak projesi için geliştirdiğimde farklı bir ayar var (C döneminden kalma şirket geçmişi). yüzden komuta sınıfında aşağıdaki kodu yazdım:Visual Studio ayarlarını bir uzantı ile yazmak kalmıyor

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

Eğer yöntemiyle adım ancak açtığınızda Seçenekler orijinal değerlerini kalır iletişim zaman onu değiştirir deneysel kovanında test. Yeniden hata ayıkladığınızda, değerler orijinal kalır.

Neyi unuttum ya da yanlış yaptım?

+0

settingsStore.CommitChanges() veya bunun gibi bir şey yapmanız gerektiğine inanıyorum. :) –

+0

@ Dr.Stitch mevcut değil. –

+0

buna ne dersin "settingsStore.Settings.Default.Save();" ? bunun için üzgünüm. –

cevap

4

EnvDTE aksamındaki Properties işlevselliği aracılığıyla Visual Studio seçeneklerine doğrudan erişin. Referans için

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

Bu yanıt, aynı http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-a-value-in-a-vspackage adresinde olduğu gibi çalışır ancak Visual Studio'yu yeniden başlattığınızda değişiklikler kalmaz. –

+0

Bunu Visual Studio 2013 ile test ettim. Ve Visual Studio'yu yeniden başlattıktan sonra değişen ayarlar geçerli. – NineBerry

+0

Deneysel bir kovan sorunu olmalı. Şimdi çalışıyor. Tamamlanmak için cevabımı görün. (Formatı formatla). –

1

tamamlandığına. Eğer

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

eklemek Ve komutuyla bu değiştirilen seçenekleri ile geçersiz olduğu bir sorun var bu

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

gibidir gereken Yapıcıda

: Bu Doğru cevap Visual Studio'yu yeniden başlattığınızda varsayılan.

+0

Değerleri hem dte.properties hem de settingsstore ile yazmamalısınız. Tek başına dte.properties kullanmak yeterlidir. – NineBerry

+0

Evet, haklısın. Cevabımı düzenledim. –