6

Trong phần mở rộng của tôi mà tôi đang viết cho Visual Studio 2015 tôi muốn thay đổi kích thước tab và kích thước indent như tại nơi làm việc chúng tôi có một cài đặt khác như khi tôi đang phát triển cho dự án mã nguồn mở (lịch sử công ty có niên đại C). Tôi đã viết đoạn mã sau vào lớp lệnh của tôi:Viết Visual Studio cài đặt trong một phần mở rộng không ở lại

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

Khi thử nghiệm trong một tổ ong nghiệm nó thay đổi nó khi bạn bước qua phương pháp này nhưng khi bạn mở Options thoại nó vẫn như giá trị ban đầu. Khi bạn gỡ lỗi một lần nữa các giá trị vẫn giữ nguyên bản gốc.

Tôi đã quên hoặc làm gì sai?

+0

Tôi tin rằng bạn cần phải thực hiện settingsStore.CommitChanges() hoặc một cái gì đó tương tự. :) –

+0

@ Dr.Stitch không tồn tại. –

+0

về điều này "settingsStore.Settings.Default.Save();" ? xin lỗi vì điều đó. –

Trả lời

4

Truy cập trực tiếp vào các tùy chọn Visual Studio thông qua chức năng Properties trong hội đồng 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); 
} 

Để tham khảo: Controlling Options Settings

+0

Điều này hoạt động như câu trả lời này là một chút giống nhau http://stackoverflow.com/questions/14615524/how-to-refresh-visual-studio-settings-after-setting-a-value-in-a-vspackage nhưng những thay đổi không ở lại khi bạn khởi động lại Visual Studio. –

+0

Tôi đã thử nghiệm điều này với Visual Studio 2013. Và các thiết đặt thay đổi tồn tại sau khi bạn khởi động lại Visual Studio. – NineBerry

+0

Phải là một vấn đề hive thử nghiệm. Hoạt động ngay bây giờ. Xem câu trả lời của tôi để được hoàn thành. (Định dạng tài liệu). –

1

Để được hoàn tất. Đây là câu trả lời đúng:

Trong constructor bạn cần phải thêm

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

Và với lệnh nó là như thế này

_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ó một vấn đề mà các tùy chọn thay đổi được ghi đè với mặc định khi bạn khởi động lại Visual Studio.

+0

Bạn không nên viết các giá trị với cả dte.properties và settingsstore. Chỉ sử dụng dte.properties là đủ. – NineBerry

+0

Bạn đúng. Đã chỉnh sửa câu trả lời của tôi. –

Các vấn đề liên quan