VSPackage を使用した拡張機能の作成
このチュートリアルでは、VSIX プロジェクトを作成し、VSPackage プロジェクト項目を追加する方法について説明します。 メッセージ ボックスを表示するために、VSPackage を使用して UI シェル サービスを取得します。
VSPackage を作成する
FirstPackage という名前の VSIX プロジェクトを作成します。 VSIX プロジェクト テンプレートは、[新しいプロジェクト] ダイアログで「vsix」と検索すると見つかります。
プロジェクトが開いたら、FirstPackage という名前の Visual Studio パッケージ項目テンプレートを追加します。 ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]>[新しい項目] の順に選択します。 [新しい項目の追加] ダイアログで、[Visual C#]>[機能拡張] の順にアクセスし、[Visual Studio パッケージ] を選択します。 ウィンドウの下部にある [名前] フィールドで、コマンド ファイル名を FirstPackage.cs に変更します。
プロジェクトをビルドし、デバッグを開始します。
Visual Studio の実験用インスタンスが表示されます。 実験用インスタンスの詳細については、「実験用インスタンス」を参照してください。
実験用インスタンスで、[ツール]>[拡張機能と更新プログラム] ウィンドウを開きます。 FirstPackage 拡張機能がここに表示されます (Visual Studio の作業インスタンスで [拡張機能と更新プログラム] を開いた場合、FirstPackage は表示されません)。
VSPackage を読み込む
この時点では、読み込む理由となるものがないため、拡張機能は読み込まれません。 通常、拡張機能を読み込むには、UI を操作する (メニュー コマンドをクリックするか、ツール ウィンドウを開く) か、または VSPackage が特定の UI コンテキストで読み込まれるように指定します。 VSPackage と UI コンテキストの読み込みの詳細については、VSPackage の読み込みに関するページを参照してください。 この手順では、ソリューションを開くときに VSPackage を読み込む方法について説明します。
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
VSPackage が読み込まれたことを知らせるメッセージを追加してみましょう。 VSPackage が配置されないと Visual Studio サービスを取得できないため、VSPackage の
Initialize()
メソッドを使用します (サービスの取得の詳細については、「方法: サービスを取得する」を参照してください)。FirstPackage
のInitialize()
メソッドを、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)); }
プロジェクトをビルドし、デバッグを開始します。 実験用インスタンスが表示されます。
実験用インスタンスでソリューションを開きます。 「First Package Inside Initialize()」というメッセージ ボックスが表示されます。