从设置存储中获取服务信息

可以使用设置存储来查找所有可用的服务,或确定是否安装了特定服务。 必须知道服务类的类型。

列出可用服务

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

  2. FindServicesCommand.cs 中,添加以下 using 指令:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    using System.Windows.Forms;
    
  3. 获取配置设置存储区,然后找到名为 Services 的子集合。 此集合包括所有可用的服务。 在 MenuItemCommand 方法中,删除现有代码并将其替换为以下内容:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
        string message = "Available services:\n";
        IEnumerable<string> collection = configurationSettingsStore.GetSubCollectionNames("Services");
        int n = 0;
        foreach (string service in collection)
        {
            message += configurationSettingsStore.GetString("Services\\" + service, "Name", "Unknown") + "\n";
        }
    
        MessageBox.Show(message);
    }
    
  4. 生成项目并启动调试。 这将显示实验实例。

  5. 在实验实例的 “工具” 菜单上,单击“ 调用 FindServicesCommand”。

    应会看到一个消息框,其中列出了所有服务。

    若要验证这些设置,可以使用注册表编辑器。

查找特定服务

还可以使用 CollectionExists 该方法来确定是否安装了特定服务。 必须知道服务类的类型。

  1. 在上一过程中创建的项目的 MenuItemCallback 中,搜索具有服务 GUID 命名的集合的配置设置存储 Services 区。 在这种情况下,我们将查找帮助服务。

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
        string helpServiceGUID = typeof(SVsHelpService).GUID.ToString("B").ToUpper();
        bool hasHelpService = configurationSettingsStore.CollectionExists("Services\\" + helpServiceGUID);
        string message = "Help Service Available: " + hasHelpService;
    
        MessageBox.Show(message);
    }
    
  2. 生成项目并启动调试。

  3. 在实验实例的 “工具” 菜单上,单击“ 调用 FindServicesCommand”。

    应会看到一条消息,其中包含文本 “帮助服务可用”: 后跟 TrueFalse。 若要验证此设置,可以使用注册表编辑器,如前面的步骤所示。