次の方法で共有


チュートリアル: プロジェクトの読み込み時にトリガーされる簡単なプロジェクト機能の作成

更新 : 2010 年 7 月

プロジェクト関連のアクションが発生したときにカスタム動作を実行するプロジェクト機能を作成できます。 このチュートリアルでは、データベース プロジェクトが読み込まれたときにダイアログ ボックスを表示する、SampleProjectFeature という名前のプロジェクト機能を作成します。 このサンプルを変更して、データベース プロジェクトが読み込まれたときにアクションを実行することもできます。

このチュートリアルでは、次の主要タスクを行います。

  • Visual Studio パッケージの作成

  • プロジェクト機能の定義

  • プロジェクト機能のテスト

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

  • Visual Studio 2010 Professional、Visual Studio 2010 Premium、または Visual Studio 2010 Ultimate をインストールしておく必要があります。

  • データベース プロジェクトが必要です。

  • また、コンピューターに Visual Studio 2010 SDK をインストールしておく必要があります。 このキットをダウンロードするには、Microsoft Web サイトの Visual Studio 2010 SDK のページを参照してください。

注意

このチュートリアルは、既に Visual Studio のデータベース機能を使い慣れているユーザーを対象としています。 また、クラス ライブラリの作成方法、コード エディターを使用してクラスにコードを追加する方法など、Visual Studio の基本的な概念を理解している必要があります。

Visual Studio パッケージの作成

Visual Studio Integration Package ウィザードを開始するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [インストールされたテンプレート] の一覧で、[その他のプロジェクトの種類] ノードを展開し、[機能拡張] ノードをクリックします。

  3. 詳細ペインで [Visual Studio Integration Package] をクリックします。

    重要

    Visual Studio 2010 SDK をインストールしていない場合、プロジェクトの種類として [Visual Studio Integration Package] は表示されません。

  4. [名前] ボックスに「SampleProjectFeature」と入力します。

  5. [OK] をクリックします。

    Visual Studio Integration Package ウィザードが表示されます。

    次に、ウィザードを使用して、作成するプロジェクトを構成します。

Visual Studio Integration Package ウィザードを使用してプロジェクトを作成するには

  1. [次へ] をクリックします。

  2. [言語の選択] で、[Visual C#] をクリックします。

    注意

    Visual Basic または Visual C++ を使用してパッケージを作成することもできます。 このチュートリアルでは、Visual Basic および Visual C# のサンプル コードのみを示します。

  3. [アセンブリ署名用のキーの取得] で、[アセンブリ署名用の新しいキー ファイルを生成する] をクリックします。

  4. [次へ] をクリックします。

  5. [会社名] ボックスに「MyCompany」と入力します。

  6. [VSPackage 名] ボックスに「SampleProjectFeature」と入力します。

  7. (省略可能) 特定のバージョン番号を指定できます。

  8. (省略可能) パッケージで使用するアイコンをカスタマイズできます。

  9. (省略可能) [詳細情報] ボックスに、パッケージについての詳細情報を入力できます。

  10. [次へ] をクリックします。

  11. [メニュー コマンド] チェック ボックスをオンにします。

  12. [ツール ウィンドウ] チェック ボックスと [カスタム エディター] チェック ボックスがオフになっていることを確認します。

  13. [次へ] をクリックします。

  14. [コマンド名] ボックスに「Toggle Project Loaded Dialogs」と入力します。

  15. [コマンド ID] ボックスに「cmdidEnableDialogs」と入力します。

  16. [次へ] をクリックします。

  17. [統合テスト プロジェクト] チェック ボックスおよび [単体テスト プロジェクト] チェック ボックスをオフにします。

    注意

    組織で実際に使用するパッケージを作成する場合は、パッケージが正しく機能することを確認するために、パッケージのテストを作成することを検討してください。

  18. [完了] をクリックします。

    "Visual Studio Integration Package" という名前のプロジェクトが作成され、ソリューション エクスプローラーに表示されます。

    次に、パッケージのコードをカスタマイズして、データベース プロジェクト機能を定義します。

プロジェクト機能の定義

データベース プロジェクト機能を定義するためにパッケージ定義を変更するには、パッケージ定義を更新し、SampleProjectFeature クラスを追加する必要があります。

パッケージ定義を更新するには

  1. ソリューション エクスプローラーで SampleProjectFeaturePackage.cs ファイルをダブルクリックして、このファイルをコード エディターで開きます。

  2. コード エディターで、MenuItemCallback メソッドを探します。

  3. このメソッドの定義を次のコードに置き換えます。

            private void MenuItemCallback(object sender, EventArgs e)
            {
                SampleProjectFeature.EnableDialogs = !SampleProjectFeature.EnableDialogs;
            }
    

    注意

    SampleProjectFeature クラスと EnableDialogs メソッドをまだ定義していないため、[エラー一覧] にエラーが表示されます。

  4. [ファイル] メニューの [SampleProjectFeaturePackage.cs の保存] をクリックします。

    次に、プロジェクト機能のクラスを定義します。

SampleProjectFeature クラスを定義するには

  1. ソリューション エクスプローラーで、SampleProjectFeature プロジェクトを右クリックし、[追加] をポイントし、[クラス] をクリックします。

    クラス テンプレートが既に強調表示された状態で、[新しい項目の追加] ダイアログ ボックスが表示されます。

  2. [名前] ボックスに「SampleProjectFeature.cs」と入力します。

  3. [追加] をクリックします。

    新しいクラスがプロジェクトに追加され、クラス定義を示すコード エディターが表示されます。

  4. ソリューション エクスプローラーで、プロジェクトを右クリックし、[参照の追加] をクリックします。

    [参照の追加] ダイアログ ボックスが表示されます。

  5. [.NET] タブをクリックします。

  6. コンポーネントの一覧で、次の参照を強調表示し、[OK] をクリックします。

    • Microsoft.Data.Schema

    • Microsoft.VisualStudio.Data.Schema.Package

  7. コード エディターで、次の using ステートメントをクラス定義に追加します。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Data.Schema.Extensibility;
    using Microsoft.Data.Schema;
    using Microsoft.VisualStudio.Data.Schema.Package.Project;
    using Microsoft.VisualStudio.Shell.Interop;
    using System.Globalization;
    
  8. クラス定義を変更して、基本クラスを指定し、この機能と互換性のあるデータベース スキーマ プロバイダーを表す属性を指定します。 このチュートリアルで示す例は、すべてのデータベース スキーマ プロバイダーと互換性があります。

        [DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))]
        class SampleProjectFeature : IDatabaseProjectFeature
        {
        }
    

    重要なインターフェイス、型、およびメソッドは、DatabaseSchemaProviderCompatibilityAttributeDatabaseSchemaProvider、および IDatabaseProjectFeature です。

  9. 次の 2 つのプロパティをクラスに追加します。

            public static bool EnableDialogs { get; set; }
            private IDatabaseProjectNode ProjectNode { get; set; }
    

    1 つ目のプロパティは、このプロジェクト機能の有効と無効を切り替えるコマンドで使用します。 重要なインターフェイスは IDatabaseProjectNode です。

  10. 次のコンストラクターをクラスに追加します。

            static SampleProjectFeature()
            {
                EnableDialogs = true;
            }
    

    このコンストラクターは、EnableDialogs プロパティを初期化します。

  11. 次の Initialize メソッドをクラスに追加します。

            public void Initialize(IDatabaseProjectNode projectNode)
            {
                ProjectNode = projectNode;
    
                // Hook up to a few events
                ProjectNode.ProjectLoaded += delegate
                {
                    ShowDialog("In ProjectLoaded Event");
                };
            }
    

    Initialize メソッドは、機能を適用する対象のプロジェクトを特定し、ProjectLoaded イベントをウォッチする準備をします。

  12. 最後に、機能が有効な場合に ProjectLoaded イベントが発生したときにダイアログ ボックスを表示する ShowDialog メソッドを追加します。

            void ShowDialog(string msg)
            {
                if (!SampleProjectFeature.EnableDialogs)
                    return;
    
                // Show a Message Box to indicate that we were here
                IVsUIShell uiShell = (IVsUIShell)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SVsUIShell));
                Guid clsid = Guid.Empty;
                int result;
                Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
                           0,
                           ref clsid,
                           "Simple Project Feature",
                           msg,
                           string.Empty,
                           0,
                           OLEMSGBUTTON.OLEMSGBUTTON_OK,
                           OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
                           OLEMSGICON.OLEMSGICON_INFO,
                           0,        // false
                           out result));
            }
    

    ユーザーがメニュー コマンドを使用して機能をオフにした場合は、メソッドから制御が戻ります。 それ以外の場合は、ダイアログ ボックスが表示されます。 独自のプロジェクト機能では、ダイアログ ボックスを表示する代わりに、追加の処理を実行することもできます。

  13. [ファイル] メニューの [SampleProjectFeature.cs の保存] をクリックします。

次に、プロジェクトをビルドします。

プロジェクトをビルドするには

  • [ビルド] メニューの [ソリューションのビルド] をクリックします。

次に、プロジェクトで生成されたアセンブリ情報を収集します。この情報には、バージョン、カルチャ、および PublicKeyToken が含まれます。

アセンブリ情報を収集するには

  1. [スタート] ボタンをクリックし、[Microsoft Visual Studio 2010] をポイントします。次に、[Visual Studio Tools] をポイントし、[Visual Studio コマンド プロンプト (2010)] をクリックします。

  2. ビルドしたアセンブリ (SampleProjectFeature.dll) が含まれているフォルダーに移動します。

  3. 次のコマンド ラインを入力します。

    SN.EXE -T SampleProjectFeature.dll

  4. 公開キー トークンをメモします。 これは次の手順で使用します。

次に、前の手順で収集したアセンブリ情報を使用して XML ファイルを作成します。

XML ファイルを作成するには

  1. ソリューション エクスプローラーで、SampleProjectFeature プロジェクトを選択します。

  2. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  3. [テンプレート] ペインで、[XML ファイル] という項目を見つけて選択します。

  4. [名前] ボックスに「SampleProjectFeature.Extensions.xml」と入力し、[追加] をクリックします。

    ソリューション エクスプローラーで、プロジェクトに SampleProjectFeature.Extensions.xml ファイルが追加されます。

  5. SampleProjectFeature.Extensions.xml ファイルを開き、次の XML に一致するように更新します。 PublicKeyToken は、前の手順で取得した値に置き換えます。

    <?xml version="1.0" encoding="utf-8"?>
    <extensions assembly=""
                version="1" xmlns="urn:Microsoft.Data.Schema.Extensions"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd">
    
      <extension type=" MyCompany.SampleProjectFeature.SampleProjectFeature" assembly="SampleProjectFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/>
    </extensions>
    
  6. [ファイル] メニューの [保存] をクリックします。

次に、Extensions.xml ファイルのプロパティを変更して、このファイルを vsixmanifest に含めます。

SampleProductFeature.Extensions.xml を vsixmanifest に含めるには

  1. ソリューション エクスプローラーで、SampleProjectFeature.Extensions.xml をクリックします。

  2. [プロパティ] ウィンドウで、[ビルド アクション] プロパティを [コンテンツ] に変更します。

  3. [VSIX に含める] プロパティを [True] に変更します。

  4. [ファイル] メニューの [すべてを保存] をクリックします。

  5. [ビルド] メニューの [SampleProjectFeature のビルド] をクリックします。

    vsixmanifest ファイルが更新されます。 これで、プロジェクト機能をテストする準備が整いました。

プロジェクト機能のテスト

プロジェクト機能をテストするには、最初にプロジェクトをビルドする必要があります。その後、F5 キーを押して Visual Studio の実験用ビルドを開始できます。

データベース プロジェクト機能をビルドしてテストするには

  1. [プロジェクト] メニューの [ビルド] をクリックします。

    プロジェクトがビルドされます。

  2. F5 キーを押して、Visual Studio の実験用ビルドでパッケージを実行します。

    Visual Studio の実験用のインスタンスが表示されます。 [ツール] メニューに、Toggle Project Loaded Dialogs コマンドが表示されます。

  3. [ファイル] メニューの [開く] をポイントし、[プロジェクト/ソリューション] をクリックします。

  4. 開くデータベース プロジェクト (.dbproj) を参照し、[開く] をクリックします。

    データベース プロジェクトが読み込まれると、"Simple Project Feature In ProjectLoaded Event" というメッセージを示すダイアログ ボックスが表示されます。

    この時点で、プロジェクト機能をカスタマイズして機能を追加できます。

次の手順

このチュートリアルで作成した機能をコピーして作業の開始点として使用する場合は、以下を実行する必要があります。

  • 拡張機能に一意の名前を付けます。

  • 拡張機能に一意の GUID を付けます。

Visual Studio Integration Package ウィザードを使用して新しいパッケージを作成すると、自動的に新しい GUID が作成されます。

Visual Studio の標準のインスタンスでパッケージを使用可能にするには、パッケージを登録する必要があります。 VSPackage の詳細については、以下を参照してください。

参照

処理手順

How to: Troubleshoot VSPackages

概念

Visual Studio のデータベース機能の拡張

データベース プロジェクトとサーバー プロジェクトの概要

その他の技術情報

データベース プロジェクトのカスタム機能の作成

履歴の変更

日付

履歴

理由

2010 年 7 月

Extensions.xml ファイルをわずかに修正して、お客様が確認した問題を解決しました。

カスタマー フィードバック