方法: ソリューション アドインを作成する
アドイン ウィザードを使用してアドインを作成すると、アドインは、統合開発環境 (IDE: Integrated Development Environment) に自動的に関連付けられます。アドインは IDE の起動時に読み込むことができ、アンロードするか IDE を終了するまでは継続して実行されます。また、アドインがソリューション アドインになるように、ソリューションに関連付けることもできます。ソリューション アドインは、システムの依存関係が原因で特定のソリューションだけを使用して読み込む場合や、不必要にシステム リソースが使用されるのを最小限に抑える場合に役立ちます。Visual Studio でソリューションを読み込むと、最初に、ソリューション (.sln) ファイルがアドインを参照しているかどうかがチェックされます。アドインを参照している場合は、アドインが読み込まれ、標準の Visual Studio アドインと同じ IDTExtensibility2 メソッドが呼び出されます。
アドイン ウィザードには、現在、アドインがソリューション アドインかどうかを示す方法が用意されていません。ただし、わずかな変更を加えると、アドインをソリューション アドインにすることができます。一般的なアドインでは、その情報は .Addin XML ファイル (アンマネージ COM アドインの場合はレジストリ) に格納されますが、ソリューション アドインでは、ソリューションの .SLN ファイルに格納されます。
[!メモ]
ソリューション アドインは、従来の COM ベースの登録を使用して登録する必要があります。Visual Studio 2005 アドインでは新しい XML (.AddIn ファイル) 登録が使用されるため、アドインを Windows レジストリに登録するように設定する必要があります。次の手順では、この設定方法について説明します。
[!メモ]
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。
ソリューション アドインの作成
ソリューション アドインの作成方法を次に示します。
ソリューション アドインを作成するには
アドイン ウィザードを使用して新しいアドイン プロジェクトを作成します。適切な言語を選択し、その他すべての既定の設定をそのまま使用します。
プロジェクトを右クリックし、[プロパティ] をクリックします。
[ビルド] タブをクリックし、[COM 相互運用機能の登録] チェック ボックスをオンにします。
これにより、アドインを、ソリューション アドインに必要な COM オブジェクトとして参照できます。アドイン ウィザードにより、プロジェクト用の .AddIn XML ファイルが作成されましたが、このファイルは、ソリューション アドインには必要ないので自由に削除できます。
ソリューション アドインは COM オブジェクトなので、Windows に登録する必要があります。この操作を行うには、Visual Studio コマンド プロンプトを起動し、「regasm /codebase SolutionAddinName.dll」と入力します。
アドインはレジストリを使用してソリューション ファイルに関連付けることができないため、この操作を行うには、コードを使用する必要があります。アドインをソリューション ファイルに登録するには、ソリューションの AddIns コレクションの Add メソッドを使用します。
AddIns は AddIns コレクションを返します。これは、Visual Studio 内のすべてのアドインで構成されているのではなく、指定したソリューション ファイルに登録されているアドインだけで構成されている点を除いて、AddIns と同じです。そのため、アドインをソリューション アドインとして登録するには、Solution.AddIns.Add を使用します。
Visual Basic および Visual C# の例を次に示します。これらの行では、アドイン ウィザードに用意されている OnConnection メソッド内のアドイン変数宣言を置き換える必要があります。
Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE100 . . . Dim addin As EnvDTE.AddIn = _ _applicationObject.Solution2.AddIns.Add("MyAddin1.Connect", "MyAddinName", "My add-in description", True)
using EnvDTE; using EnvDTE80; using EnvDTE90; using EnvDTE100; . . . EnvDTE.AddIn addin = _applicationObject.Solution.AddIns.Add(MyAddin.Connect, "MyAddinName", "My add-in description", true);