次の方法で共有


設定ストアからのサービス情報の取得

設定ストアを使用して、使用可能なすべてのサービスを検索する方法、または特定のサービスがインストールされているかどうかを確認できます。 サービス クラスの型を把握している必要があります。

使用できるサービスを一覧表示する方法

  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 の呼び出し] をクリックします。

    ヘルプ サービスが使用可能:」、その後に True または False が続くメッセージが表示されます。 この設定を確認するには、前の手順で示したように、レジストリ エディターを使用します。