プロジェクト機能拡張の概要

更新 : 2007 年 11 月

オブジェクト モデルは、VSLangProj.dll、VSLangProj2.dll、VSLangProj80.dll、および VSLangProj90.dll の VSLangProj アセンブリへの参照をプロジェクトに追加するだけで使用できます。詳細については、「方法 : Visual Studio で参照を追加または削除する (Visual Basic)」を参照してください。これは、オブジェクト モデルがマクロやアドインに対して、および IDE を拡張または自動化する必要のある任意の種類のプロジェクトに対して使用できることを意味します。マクロは、Visual Basic を使用して、マクロ統合開発環境 (IDE: Integrated Development Environment) で作成します。このトピックの例は、Visual Basic 言語および Visual C# 言語で作成されています。この例の実行方法の詳細については、「方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する」を参照してください。アドインは、Visual Basic、Visual C#、Visual C++、Visual J# など Visual Studio でホストされる言語で記述できます。VSLangProjVSLangProj2VSLangProj80、および VslangProj90 の各メンバに関するリファレンス トピックには、各言語の構文も含まれています。オートメーション プロジェクトの種類およびオートメーションの機能については、「アドインおよびウィザードの作成」を参照してください。

VSLangProj、VSLangProj2、VSLangProj80、および VSLangProj90 の各名前空間

これらの名前空間には、Visual Basic、Visual C#、および Visual J# の各プロジェクトのすべてのクラス、インターフェイス、および列挙体が含まれています。名前空間内のオブジェクトの一覧については、「Visual Basic および Visual C# プロジェクトの機能拡張オブジェクト モデル」を参照してください。

EnvDTE アセンブリと共に VSLangProj アセンブリを使用した場合に発生する可能性のあるエラー

EnvDTE アセンブリおよび 1 つ以上の VSLangProj アセンブリを参照するプロジェクトを作成した場合に、次の実行時エラーが発生することがあります。

"ハンドルされていない例外: System.IO.FileNotFoundException: ファイル 'EnvDTE, Version=7.0.3300.0' を読み込み中にエラーが発生しました。"

このエラーは、実行時の型解決における競合が原因で発生します。つまり、Visual Studio 2005 に付属している EnvDTE のバージョンが 8.0.xx であるにもかかわらず、プロジェクトの構成では、このアセンブリの以前のバージョン 7.0.xx を参照していることが原因です。この問題を修正するには、新しいバージョンの EnvDTE 用のバインディング リダイレクトを、プロジェクトの構成 (.config) ファイルに追加する必要があります。これにより、Visual Studio は、新しいバージョンの EnvDTE を読み込み、エラーの発生を防ぐことができます。

このためには、"アプリケーション構成ファイル" をプロジェクトに追加し、ファイルの内容を次のように置き換えます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-
        com:asm.v1" appliesTo="v2.0.50318">
            <dependentAssembly>
                <assemblyIdentity name="EnvDTE" publicKeyToken=
                "b03f5f7f11d50a3a"/>
                <bindingRedirect oldVersion="7.0.3300.0" 
                newVersion="8.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

VSProject2 オブジェクト

このオブジェクトは、機能拡張モデル内の他のオブジェクトにアクセスできます。DTE オブジェクトは、Visual Studio オートメーション モデルのトップレベル オブジェクトです。汎用機能拡張モデルでは、プロジェクトは汎用的な Project オブジェクトによって表されます。Project オブジェクトには Object プロパティがあります。このプロパティの型は、プロジェクトの言語によって実行時に決定されます。Visual Basic、Visual C#、または Visual J# のプロジェクトでは、Object プロパティは VSProject2 型のオブジェクトを返します。Object プロパティは Object 型であるため、参照を VSProject2 型にキャストする必要があります。マクロでは、最初のプロジェクトが Visual Basic プロジェクトの場合、キャストは次のようになります。

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;

VSProject2 項目への参照を設定した後、プロジェクトのプロパティ、構成、ファイル、フォルダ、Imports ステートメント、および参照を操作できるようになります。

詳細については、「VSProject2 オブジェクトの概要」を参照してください。

References オブジェクトと Reference オブジェクト

VSProject2 オブジェクトに含まれる References プロパティは、Reference3 オブジェクトのコレクションを保持します。Reference3 オブジェクトは、プロジェクト参照を表し、主に、Remove メソッドをサポートする読み取り専用のオブジェクトです。References オブジェクトは、参照の追加 (COM、.NET アセンブリ、ActiveX、その他のプロジェクト) およびイベントの発生 (参照の追加、削除、および変更) をサポートしています。

References オブジェクトには、プロジェクトの Web 参照は含まれません。WebReferencesFolder プロパティの ProjectItems プロパティにアクセスすることにより、プロジェクトの Web 参照を取得できます。

詳細およびコード例については、Reference オブジェクト、Reference3 オブジェクト、References コレクション、References プロパティ、および WebReferencesFolder プロパティに関するトピックを参照してください。

Imports オブジェクト

VSProject2 オブジェクトに含まれる Imports プロパティは、Visual Basic プロジェクト全体に適用される Imports ステートメントのコレクションを保持します。Imports ステートメントがこのコレクションに追加されると、対応する Imports ステートメント (たとえば、Imports VSLangProj) をコード ファイルに追加する必要がなくなります。このオブジェクトは、Imports ステートメントの追加と削除、およびステートメントの追加と削除に応じたイベントの発生をサポートしています。Visual C# プロジェクトにはこれに相当するものがないため、VSProject2.Imports プロパティは、Visual C# プロジェクトに適用された場合、Nothing または null を返します。詳細については、「Imports」を参照してください。

VSProjectItem オブジェクトと BuildManager オブジェクト

VSProjectItem オブジェクトは、VSProject2 オブジェクトに対応するプロジェクト項目です。汎用機能拡張モデルでは、汎用的な ProjectItem オブジェクトはプロジェクト項目を表します。Object プロパティの型は Object です。Visual Basic プロジェクトまたは Visual C# プロジェクトでは、このプロパティの型は VSProjectItem になります。マクロでは、次のように、オブジェクトを VSProjectItem 型にキャストします。

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
    Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;

VSProjectItem オブジェクトには、親プロジェクト項目とプロジェクトにリンクするプロパティ、およびその項目に対してカスタム ツールを強制的に実行するメソッドが含まれています。BuildManager オブジェクトは、カスタム ツールの出力を処理します。詳細については、「BuildManager オブジェクトの概要」と、RunCustomTool メソッド、VSProjectItem オブジェクト、および BuildManager オブジェクトに関するトピックを参照してください。

Properties プロパティ

汎用機能拡張モデルでは、次の 3 つのオブジェクトに Properties プロパティがあります。

  • Project オブジェクト   このオブジェクトのプロパティは、IDE でプロジェクトの [プロパティ ページ] ダイアログ ボックスを開いたときに [共通プロパティ] タブに表示されるプロパティに相当します。

  • Configuration オブジェクト   このオブジェクトのプロパティは、IDE でプロジェクトの [プロパティ ページ] ダイアログ ボックスを開いたときに [構成プロパティ] タブに表示されるプロパティに相当します。

  • ProjectItem オブジェクト   このオブジェクトのプロパティは、ソリューション エクスプローラでプロジェクト項目を選択したときに [プロパティ] ウィンドウに表示されるプロパティに相当します。

  • いずれの場合にも、Properties プロパティは Property 型のオブジェクトのコレクションです。Property オブジェクトをコレクションから取得するには、プロパティの 1 から始まるインデックスまたはプロパティの名前を指定します。コレクションの内容は、言語によって異なります。プロジェクト項目の場合、内容は項目がファイルかフォルダかによっても異なります。

参照

概念

Visual Studio オートメーションの範囲

その他の技術情報

アドインおよびウィザードの作成