在扩展中写入Visual Studio设置不会停留



在我为Visual Studio 2015编写的扩展中,我想更改制表符大小和缩进大小,因为在工作中,我们的设置与我为开源项目开发时不同(公司历史可以追溯到C时期)。我在命令类中编写了以下代码:

private const string CollectionPath = @"Text EditorCSharp";
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);
  }
}

在实验配置单元中进行测试时,当您逐步执行该方法时,它会对其进行更改,但当您打开"选项"对话框时,它将保持原始值。再次调试时,值保持不变。

我忘了什么或做错了什么?

通过EnvDTE程序集中的Properties功能直接访问Visual Studio选项。

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

供参考:控制选项设置

待完成。这是正确的答案:

在构造函数中,您需要添加

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

重新启动Visual Studio时,存在更改后的选项被默认选项覆盖的问题。

相关内容

  • 没有找到相关文章

最新更新