次の方法で共有


VSPackage を使用した拡張機能の作成

このチュートリアルでは、VSIX プロジェクトを作成し、VSPackage プロジェクト項目を追加する方法について説明します。 メッセージ ボックスを表示するために、VSPackage を使用して UI シェル サービスを取得します。

VSPackage を作成する

  1. FirstPackage という名前の VSIX プロジェクトを作成します。 VSIX プロジェクト テンプレートは、[新しいプロジェクト] ダイアログで「vsix」と検索すると見つかります。

  2. プロジェクトが開いたら、FirstPackage という名前の Visual Studio パッケージ項目テンプレートを追加します。 ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]>[新しい項目] の順に選択します。 [新しい項目の追加] ダイアログで、[Visual C#]>[機能拡張] の順にアクセスし、[Visual Studio パッケージ] を選択します。 ウィンドウの下部にある [名前] フィールドで、コマンド ファイル名を FirstPackage.cs に変更します。

  3. プロジェクトをビルドし、デバッグを開始します。

    Visual Studio の実験用インスタンスが表示されます。 実験用インスタンスの詳細については、「実験用インスタンス」を参照してください。

  4. 実験用インスタンスで、[ツール]>[拡張機能と更新プログラム] ウィンドウを開きます。 FirstPackage 拡張機能がここに表示されます (Visual Studio の作業インスタンスで [拡張機能と更新プログラム] を開いた場合、FirstPackage は表示されません)。

VSPackage を読み込む

この時点では、読み込む理由となるものがないため、拡張機能は読み込まれません。 通常、拡張機能を読み込むには、UI を操作する (メニュー コマンドをクリックするか、ツール ウィンドウを開く) か、または VSPackage が特定の UI コンテキストで読み込まれるように指定します。 VSPackage と UI コンテキストの読み込みの詳細については、VSPackage の読み込みに関するページを参照してください。 この手順では、ソリューションを開くときに VSPackage を読み込む方法について説明します。

  1. FirstPackage.cs ファイルを開きます。 FirstPackage クラスの宣言を探します。 既存の属性を次の属性に置き換えます。

    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
    [ProvideAutoLoad(UIContextGuids80.SolutionExists)]
    [Guid(FirstPackage.PackageGuidString)]
    public sealed class FirstPackage : Package
    
  2. VSPackage が読み込まれたことを知らせるメッセージを追加してみましょう。 VSPackage が配置されないと Visual Studio サービスを取得できないため、VSPackage の Initialize() メソッドを使用します (サービスの取得の詳細については、「方法: サービスを取得する」を参照してください)。FirstPackageInitialize() メソッドを、SVsUIShell サービスを取得し、IVsUIShell インターフェイスを取得して、ShowMessageBox メソッドを呼び出すコードに置き換えます。

    protected override void Initialize()
    {
        base.Initialize();
    
        IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
        Guid clsid = Guid.Empty;
        int result;
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
            0,
            ref clsid,
            "FirstPackage",
             string.Format(CultureInfo.CurrentCulture, "Inside {0}.Initialize()", this.GetType().FullName),
            string.Empty,
            0,
            OLEMSGBUTTON.OLEMSGBUTTON_OK,
            OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
            OLEMSGICON.OLEMSGICON_INFO,
            0,
            out result));
    }
    
  3. プロジェクトをビルドし、デバッグを開始します。 実験用インスタンスが表示されます。

  4. 実験用インスタンスでソリューションを開きます。 「First Package Inside Initialize()」というメッセージ ボックスが表示されます。