c# - 在扩展中编写 Visual Studio 设置不会停留

标签 c# visual-studio visual-studio-2015 visual-studio-extensions

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

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

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

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

最佳答案

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

供引用:Controlling Options Settings

关于c# - 在扩展中编写 Visual Studio 设置不会停留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37130639/

相关文章:

c# - ASP.NET MVC 3 - 难以理解路由

c# - 如何设置列表属性的默认值?

azure - 打包 Azure 项目时复制 Typescript 文件时出错 - Visual Studio 2015 Update1

visual-c++ - 在 VS2013 中针对 .Net 4.6 的某些项目的项目加载失败

c# - 如何在温莎城堡中自动注册(按照惯例)通用装饰器

c# - 请求失败的 .net 程序集

c# - 从 csproj 引用 xproj

visual-studio - Visual Studio中如何判断项目类型?

c++ - VS 2017 构建工具失败,错误 MSB4019 : The imported project "D:\Microsoft.Cpp.Default.props" was not found

c++ - 如何设置 XAudio2 dll 版本