写入用户设置存储

用户设置是可写入的设置, 如“工具/选项 ”对话框、属性窗口和其他某些对话框中的设置。 Visual Studio 扩展可能会使用这些扩展来存储少量数据。 本演练演示如何通过读取和写入用户设置存储,将记事本添加到 Visual Studio 作为外部工具。

写入用户设置存储

  1. 创建名为 User设置StoreExtension 的 VSIX 项目,然后添加名为 User设置StoreCommand 的自定义命令。 有关如何创建自定义命令的详细信息,请参阅 使用菜单命令创建扩展

  2. 在 User设置StoreCommand.cs 中,添加以下 using 指令:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    
  3. 在 MenuItemCallback 中,删除方法的正文并获取用户设置存储,如下所示:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
    }
    
  4. 现在,了解记事本是否已设置为外部工具。 需要循环访问所有外部工具,以确定 ToolCmd 设置是否为“记事本”,如下所示:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
    
        // Find out whether Notepad is already an External Tool.
        int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys");
        bool hasNotepad = false;
        CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo;
        for (int i = 0; i < toolCount; i++)
        {
            if (Compare.IndexOf(userSettingsStore.GetString("External Tools", "ToolCmd" + i), "Notepad", CompareOptions.IgnoreCase) >= 0)
            {
                hasNotepad = true;
                break;
            }
        }
    }
    
    
  5. 如果尚未将记事本设置为外部工具,请按如下所示进行设置:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
    
        // Find out whether Notepad is already installed.
        int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys");
        bool hasNotepad = false;
        CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo;
        for (int i = 0; i < toolCount; i++)
        {
            if (Compare.IndexOf(userSettingsStore.GetString("External Tools", "ToolCmd" + i), "Notepad", CompareOptions.IgnoreCase) >= 0)
            {
                hasNotepad = true;
                break;
            }
        }
    
        string message = (hasNotepad) ? "Notepad already installed" : "Installing Notepad";
         if (!hasNotepad)
        {
            userSettingsStore.SetString("External Tools", "ToolTitle" + toolCount, "&Notepad");
            userSettingsStore.SetString("External Tools", "ToolCmd" + toolCount, "C:\\Windows\\notepad.exe");
            userSettingsStore.SetString("External Tools", "ToolArg" + toolCount, "");
            userSettingsStore.SetString("External Tools", "ToolDir" + toolCount, "$(ProjectDir)");
            userSettingsStore.SetString("External Tools", "ToolSourceKey" + toolCount, "");
            userSettingsStore.SetUInt32("External Tools", "ToolOpt" + toolCount, 0x00000011);
    
            userSettingsStore.SetInt32("External Tools", "ToolNumKeys", toolCount + 1);
        }
    }
    
  6. 测试代码。 请记住,它将记事本添加为外部工具,因此必须在再次运行注册表之前回滚注册表。

  7. 生成代码并开始调试。

  8. “工具”菜单上,单击“调用用户设置StoreCommand”。 这将向“工具”菜单添加记事本

  9. 现在,应会在“工具/选项”菜单上看到记事本,单击记事本会显示记事本实例。