アドイン プロジェクトのコンポーネント
アドイン プロジェクトは、アドイン ウィザードを使用して作成され、DLL にコンパイルされるクラス ライブラリ プロジェクトです。アドイン プロジェクトには、Connect という名前のソース コード ファイルが含まれます。Connect はクラスの名前でもあります。Connect クラスは、アドインと Visual Studio 統合開発環境 (IDE: Integrated Development Environment) との間でコマンドを渡す、IDTExtensibility2 という名前のインターフェイスを実装しています。
IDTExtensibility2 には、実装した場合にイベントとして機能する 5 つのメソッドがあります。
メソッド |
Description |
---|---|
Visual Studio でアドインが読み込まれるときに呼び出されます。 |
|
Visual Studio で読み込みが完了するときに呼び出されます。 |
|
アドインが Visual Studio から読み込まれるかアンロードされるときに呼び出されます。 |
|
Visual Studio を閉じるときに呼び出されます。 |
|
アドインが Visual Studio からアンロードされるときに呼び出されます。 |
アドイン ウィザードを使用してアドインを作成する場合にユーザー インターフェイス オプションを選択すると、IDTExtensibility2 インターフェイスだけでなく、IDTCommandTarget インターフェイスも自動的に実装されます。アドインのコマンド バーを作成または操作する場合は、Microsoft.VisualStudio.CommandBars 名前空間も実装する必要があります。
OnConnection メソッド
OnConnection メソッドは、アドインを読み込むたびに呼び出されるため、確実に、アドイン プロジェクトで使用される最も重要なメソッドになります。また、アドインで他のオートメーション コードを呼び出すためにも使用されます。OnConnection メソッドには、4 つのパラメーター (Application、ConnectMode、AddInInst、および custom) が渡されます。Application は Visual Studio IDE を示します。このメソッドは、_applicationObject という名前の DTE2 オブジェクトとしてキャストされます。このオブジェクトは、主要なオートメーション モデルのメイン オブジェクトを表し、すべての型およびメンバーにアクセスできます。ConnectMode (この値は Extensibility.extConnectMode に含まれます) は、アドインを読み込む方法 (コマンド ラインを使用する、ソリューションを開くなど) を表します。AddInInst は、アドイン自体を表します。custom パラメーターは、必要に応じてアドインに渡すことができるデータを含む配列です。
OnConnection は、これらの変数を初期化するだけでなく、アドイン ウィザードで [ツール] メニューのアドインの作成時にそのオプションを選択した場合に、そのアドイン用のコマンドを作成するコードを含めることもできます。
その他のアドイン メソッド
既定では、アドイン ウィザードによって配置される他の 4 つのアドイン メソッドは空です。アドインに関連するイベントを処理するには、このようなその他のメソッドを使用してイベントに応答します。たとえば、OnAddInsUpdate メソッドにコードを追加し、アドインを閉じたときに別のプロシージャに通知メッセージを送信できます。OnBeginShutdown を呼び出し、Visual Studio IDE をシャットダウンする際にクリーンアップ タスクを実行できます。
アドインを作成し、[ツール] メニューのアドイン用のコマンドを作成する [アドイン用のコマンド バー UI を作成しますか?] チェック ボックスをオンにすると、IDTCommandTarget インターフェイスが実装されます。他の 2 つのメソッド (QueryStatus および Exec) は、コマンドのタスクを処理するためにアドイン プロジェクトに追加されます。これらのメソッドには、[ツール] メニューにコマンドを配置し、ユーザーによるクリックに対応できるように少量のコードが含まれています。QueryStatus は、コマンドが使用できるかどうかをアドインに通知します。Exec メソッドは、ユーザーが [ツール] メニューのアドインのコマンドをクリックしたときに呼び出されます。そのため、そのイベントに対応するには、ここにコードを追加する必要があります。