プロパティ ページ
ユーザーは、プロパティ ページを使用して、プロジェクト構成に依存するプロパティや依存しないプロパティを表示したり変更したりすることができます。 [プロパティ ページ] ボタンは、選択されたオブジェクトのプロパティ ページ ビューを提供するオブジェクトに関する [プロパティ] ウィンドウまたはソリューション エクスプローラーのツールバーで有効になります。 プロパティ ページは環境によって作成され、ソリューションやプロジェクトに対して使用できます。 ただし、構成に依存するプロパティを使用するプロジェクト項目に対して使用可能にすることもできます。 この機能は、プロジェクト内のファイルを正しくビルドするにはさまざまなコンパイラ スイッチの設定が必要な場合に使用されることがあります。
プロパティ ページの使用
プロパティ ページが既に表示されていて、その選択が (たとえば、ソリューションからプロジェクトに) 変更された場合、そのページに表示される情報は新しい選択に関するプロパティを表示するように変更されます。 そのオブジェクトにプロパティ ページをサポートするプロパティが存在しない場合、プロパティ ページは空になります。
複数のオブジェクトが選択されている場合、プロパティ ページには、選択されたすべての項目に関するプロパティの共通部分が表示されます。 選択された項目に構成に依存するプロパティが含まれていないときに、ソリューション エクスプローラーのツールバーの [プロパティ ページ] ボタンがクリックされた場合、フォーカスはプロパティ ウィンドウに変更されます。 プロパティ ウィンドウと選択に関連する詳細については、プロパティの拡張に関するページを参照してください。
複数のオブジェクトに関するプロパティが表示されているときに、プロパティ ページの値を変更した場合は、それらのオブジェクトに関するすべての値が新しい値に設定されます。これらの値が最初は異なっていたり、個々のオブジェクトのプロパティが表示されたときにページが空白であったりした場合でも同じです。
Visual Studio で使用できる [プロジェクト プロパティ ページ] ダイアログ ボックスは、通常は 2 種類です。 最初に (Visual Basic プロジェクトの場合など)、次のスクリーンショットに示すように、プロパティ ページがフィールド形式を使用して表示されます。 2 番目には (このセクションの後の方に示されています)、プロパティ ページがプロパティ ウィンドウにあるのと同様のプロパティ グリッドをホストします。
フィールド形式とツリー構造を持つ [プロジェクト プロパティ ページ] ダイアログ ボックス
[プロパティ ページ] ダイアログ ボックスのツリー構造は、IVsHierarchy を使用して構築されるわけではありません。 環境が、ISpecifyPropertyPages および IVsPropertyPage インターフェイスから渡されたレベル名に基づいて、これを構築します。
Visual Studio プロパティ ページで使用できる最上位レベルのカテゴリは次の 2 つのみです。
[共通プロパティ] 選択された 1 つまたは複数のオブジェクトに関する、構成に依存しない情報が表示されます。 その結果、いずれかの [共通プロパティ] サブカテゴリが選択された場合、このダイアログ ボックスの上部にある [構成]、[プラットフォーム]、[構成マネージャー] オプションは使用できなくなります。
[構成プロパティ] ソリューションまたはプロジェクトの [デバッグ]、[最適化]、[ビルド] パラメーターに関連した、構成に依存する情報が含まれています。
最上位レベルのカテゴリを追加で作成することはできませんが、
IVsPropertyPage
の実装でどちらかが表示されないように選択することは可能です。 たとえば、あるオブジェクトに関して表示する、構成に依存しないプロパティが存在しない場合は、[共通プロパティ] カテゴリが表示されないように選択できます。 構成オブジェクト (IVsCfg
、IVsProjectCfg
、関連するインターフェイスを実装しているオブジェクト) でISpecifyPropertyPages
を実装するときに、ISpecifyPropertyPages
が項目の参照オブジェクトと構成プロパティから実装されている場合は [共通プロパティ] を表示します。最上位レベルのカテゴリの下に表示されている各カテゴリは、個別のプロパティ ページを表します。 このダイアログ ボックスで使用できるカテゴリとサブカテゴリのエントリは、
ISpecifyPropertyPages
とIVsPropertyPage
の実装によって決定されます。プロパティ ページにプロパティが表示されている選択コンテナー内の項目の
IDispatch
オブジェクトによって、クラス ID の一覧を列挙するためのISpecifyPropertyPages
が実装されます。 これらのクラス ID は変数としてISpecifyPropertyPages
に渡され、プロパティ ページをインスタンス化するために使用されます。 クラス ID の一覧は、このダイアログ ボックスの左側にあるツリー構造を作成するためにIVsPropertyPage
にも渡されます。 その後、プロパティ ページでは、ISpecifyPropertyPages
を実装して各ページの情報を入力するIDispatch
オブジェクトに情報を戻します。参照オブジェクトのプロパティは、選択コンテナー内の各オブジェクトの
IDispatch
を使用して取得されます。VSPackage で
Help::DisplayTopicFromF1Keyword
を実装すると、[ヘルプ] ボタンの機能が提供されます。詳細については、MSDN ライブラリの
IDispatch
とISpecifyPropertyPages
を参照してください。サンプルに表示される 2 番目の種類のプロパティ ページでは、次のスクリーンショットに示すように、プロパティ グリッドのフォームをホストします。
プロパティ グリッドを含む [プロパティ ページ] ダイアログ ボックス
インターフェイス
IVSMDPropertyBrowser
とIVSMDPropertyGrid
(vsmanaged.h で宣言されています) は、ダイアログ ボックスまたはウィンドウ内にプロパティ グリッドを作成して設定するために使用されます。プロジェクトのアーキテクチャは、以前のバージョンの Visual Studio から大幅に変更されています。 特に、どのプロジェクトがアクティブであるかの概念が変更されています。 Visual Studio には、アクティブなプロジェクトという概念はありません。 以前の開発環境では、アクティブなプロジェクトは、コンテキストに関係なく、ビルドおよび配置コマンドが既定で実行されるプロジェクトでした。 現在は、どのビルドおよび配置コマンドがどのプロジェクトに適用されるかをソリューションで制御および調整します。
以前にアクティブなプロジェクトであったものは、現在、次の 3 つの異なる方法のいずれかでキャプチャされます。
スタートアップ プロジェクト
ソリューションのプロパティ ページから、ユーザーが F5 キーを押すか、または [ビルド] メニューから [実行] を選択したときに起動される 1 つまたは複数のプロジェクトを指定できます。 これは、その名前がソリューション エクスプローラーに太字のフォントで表示されるという意味で、以前のアクティブなプロジェクトと同様の方法で機能します。
スタートアップ プロジェクトは、
DTE.Solution.SolutionBuild.StartupProjects
を呼び出すことによってオートメーション モデルのプロパティとして取得できます。 VSPackage では、get_StartupProject または get_StartupProject メソッドを呼び出します。IVsSolutionBuildManager
は、SID_SVsSolutionBuildManager でQueryService
によるサービスとして使用できます。 詳細については、「プロジェクト構成オブジェクト」および「ソリューション構成」を参照してください。アクティブなソリューション ビルド構成
Visual Studio には、
DTE.Solution.SolutionBuild.ActiveConfiguration
を実装することによってオートメーション モデルで使用できるアクティブ ソリューション構成があります。 ソリューション構成は、ソリューション内のプロジェクトごとに 1 つのプロジェクト構成を含むコレクションです (各プロジェクトには、複数のプラットフォーム上の、異なる名前を持つ、複数の構成を含めることができます)。 ソリューションのプロパティ ページに関連する詳細については、「ソリューション構成」を参照してください。現在選択されているプロジェクト
選択されているプロジェクト階層と 1 つまたは複数のプロジェクト項目を取得するには、GetCurrentSelection メソッドを実装します。 DTE からは、
SelectedItems.SelectedItem.Project
およびSelectedItems.SelectedItem.ProjectItem
メソッドを使用します。 コア Visual Studio ドキュメントでは、これらの見出しの下にサンプル コードがあります。