方法 : DTE オブジェクトおよび DTE2 オブジェクトへの参照を取得する
注意
Visual Studio 2013 では、アドインは推奨されていません。アドインを VSPackage 拡張機能にアップグレードすることをお勧めします。詳細については、「FAQ: アドインを VSPackage 拡張に変換する」を参照してください。
EnvDTE アセンブリでは、DTE オブジェクトは、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) を表し、オートメーション モデル階層の最上位のオブジェクトになります。 主要なオートメーション モデルにアクセスするために、オートメーション アプリケーションではこのオブジェクトへの参照が必要になります。
ただし、EnvDTE80 アセンブリを追加すると、DTE2 という名前の最上位のオブジェクトに置き換えられ、DTE オブジェクトの代わりに使用されます。 この 2 つのオブジェクトの動作およびプログラムは同じですが、DTE2 は、新しい機能を含んでおり、新しいオブジェクトとコレクションおよび更新されたオブジェクトとコレクションをホストしています。
新しいオートメーション アプリケーションを作成するときは、新しい機能へのアクセスを提供する DTE2 オブジェクトとコア機能の残りの部分へのアクセスを提供する DTE オブジェクトの両方のオブジェクトへの参照を作成することをお勧めします。 また、できる限り、DTE の代わりに DTE2 で新しいオブジェクトおよびコレクションを使用することをお勧めします。
次のステップでは、DTE2 オブジェクトへの参照を取得する方法を示します。この手順は、DTE オブジェクトにも当てはまります。オブジェクトへの参照を追加する前に、適切なアセンブリおよびタイプ ライブラリへの参照を追加する必要があります。 詳細については、「方法: オートメーション名前空間に参照を追加する」を参照してください。
Visual Studio 2013 用に使用するプログラム ID (ProgID) は VisualStudio.DTE.12.0 です。 返されたオブジェクトは、DTE2 インターフェイスにキャストできます。
呼び出されたときに、DTE2 プロパティ、メソッド、およびイベントは、DTE 型を返します。 たとえば、Solution は、Solution オブジェクトを返しますが、Solution2 オブジェクトは返しません。 このため、DTE2 メンバーまたは他の型のメンバーを使用する場合は、これらのメンバーを明示的に型キャストする必要があります。 このデザインは一貫性を高め、混乱を減らします。 EnvDTE80.dll アセンブリは、すべての DTE2 プロパティに対し、一貫して同じインターフェイスを返します。 最新のインターフェイス バージョンを返すと、混乱を生じることがあります。たとえば、Visual Studio の将来のバージョンが DTE3 型を持つとすると、DTE、DTE2、および DTE3 をそれぞれ返すインターフェイスがある可能性があります。 さらに、EnvDTE80 の "2" インターフェイスが EnvDTE インターフェイスから派生していることが原因で、COM 相互運用の問題が発生する場合があります。 たとえば、Window2 は Window から派生し、DTE プロパティを Window2 に追加した場合、このプロパティは、Windows プロパティを非表示にし、COM アプリケーションで正しく動作しなくなります。
注意
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。詳細については、「Visual Studio での開発設定のカスタマイズ」を参照してください。
Visual Basic と C# で DTE2 オブジェクトを参照するには
コードにこれを追加します。
' Get an instance of the currently running Visual Studio IDE. Dim DTE2 as EnvDTE80.DTE2 DTE2 = System.Runtime.InteropServices.Marshal. _ GetActiveObject("VisualStudio.DTE.12.0")
// Get an instance of the currently running Visual Studio IDE. EnvDTE80.DTE2 dte2; dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal. GetActiveObject("VisualStudio.DTE.12.0");
Visual C++ (ATL) で DTE オブジェクトまたは DTE2 オブジェクトを参照するには
コードにこれを追加します。
CComPtr<EnvDTE::_DTE> m_pDTE; CComPtr<EnvDTE80::DTE2> m_pDTE2; CLSID clsid; CLSID clsid2; CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid); CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid2); CComPtr<IUnknown> punk; CComPtr<IUnknown> punk2; // Get a running instance of Visual Studio. HRESULT hr = GetActiveObject(clsid,NULL,&punk); hr = GetActiveObject(clsid2,NULL,&punk2); m_pDTE = punk; m_pDTE2 = punk2;