Visual Studio 統合開発環境 (IDE) の [プロパティ] ウィンドウでは、プロジェクトと構成のプロパティを表示できます。 ユーザーがアプリケーションのプロパティを設定できるように、独自のプロジェクト タイプのプロパティ ページを提供できます。
ソリューション エクスプローラーでプロジェクト ノードを選択し、[プロジェクト] メニューの [プロパティ] をクリックすると、プロジェクトと構成のプロパティが含まれるダイアログ ボックスを開くことができます。 Visual C# や Visual Basic、およびこれらの言語から派生したプロジェクト タイプでは、このダイアログ ボックスは、[全般]、[環境]、[オプション] ダイアログ ボックスのタブ付きページとして表示されます。 詳細については、Not in Build の「チュートリアル: プロジェクトと構成のプロパティの公開 (C#)」を参照してください。
プロジェクト用 Managed Package Framework (MPFProj) には、新しいプロジェクト システムを作成および管理するためのヘルパー クラスが用意されています。 ソース コードとコンパイルの手順については、Visual Studio 2013 のプロジェクト用 MPF に関する記事を参照してください。
プロジェクトと構成のプロパティの永続性
プロジェクトと構成のプロパティは、そのプロジェクト タイプに関連付けられたファイル名拡張子を持つプロジェクト ファイルで永続化されます (.csproj、.vbproj、myproj など)。 言語プロジェクトでは、通常、テンプレート ファイルを使用してプロジェクト ファイルを生成します。 ただし実際には、プロジェクト タイプとテンプレートを関連付ける方法はいくつかあります。 詳細については、「テンプレート ディレクトリの説明 (.Vsdir) ファイル」を参照してください。
プロジェクトと構成のプロパティは、テンプレート ファイルに項目を追加することによって作成されます。 これらのプロパティは、その後、このテンプレートを使用するプロジェクト タイプを使用して作成されるすべてのプロジェクトで使用できます。 Visual C# プロジェクトと MPFProj はどちらも、テンプレート ファイルについての Not in Build の「MSBuild の概要」のスキーマを使用します。 これらのファイルには、構成ごとに PropertyGroup セクションがあります。 プロジェクトのプロパティは、通常、Configuration 引数が null 文字列に設定されている最初の PropertyGroup セクションで永続化されます。
次のコードは、基本的な MSBuild プロジェクト ファイルの始めの部分を示しています。
<Project MSBuildVersion="2.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Name>SomeProjectSix</Name>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<Optimize>false</Optimize>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<Optimize>true</Optimize>
このプロジェクト ファイルでは、<Name>
と <SchemaVersion>
がプロジェクト プロパティで、<Optimize>
が構成プロパティです。
プロジェクト ファイルのプロジェクトと構成のプロパティの永続化は、プロジェクトで行う必要があります。
Note
プロジェクトでは、既定値とは異なるプロパティ値のみを永続化することで、永続化を最適化できます。
プロジェクトおよび構成プロパティのサポート
Microsoft.VisualStudio.Package.SettingsPage
クラスでは、プロジェクトと構成のプロパティ ページを実装します。 SettingsPage
の既定の実装では、汎用プロパティ グリッド内のユーザーに、パブリック プロパティが提供されます。 Microsoft.VisualStudio.Package.HierarchyNode.GetPropertyPageGuids
メソッドでは、プロジェクトのプロパティ グリッドの SettingsPage
から派生したクラスを選択します。 Microsoft.VisualStudio.Package.ProjectNode.GetConfigPropertyPageGuids
メソッドでは、構成のプロパティ グリッドの SettingsPage
から派生したクラスを選択します。 プロジェクト タイプでこれらのメソッドをオーバーライドして、適切なプロパティ ページを選択する必要があります。
SettingsPage
クラスと Microsoft.VisualStudio.Package.ProjectNode
クラスでは、プロジェクトと構成のプロパティを永続化するために以下のメソッドが提供されています。
Microsoft.VisualStudio.Package.ProjectNode.GetProjectProperty
とMicrosoft.VisualStudio.Package.ProjectNode.SetProjectProperty
ではプロジェクトのプロパティを永続化します。Microsoft.VisualStudio.Package.SettingsPage.GetConfigProperty
とMicrosoft.VisualStudio.Package.SettingsPage.SetConfigProperty
では構成のプロパティを永続化します。Note
Microsoft.VisualStudio.Package.SettingsPage
クラスとMicrosoft.VisualStudio.Package.ProjectNode
クラスの実装では、Microsoft.Build.BuildEngine
(MSBuild) メソッドを使用して、プロジェクト ファイルからプロジェクトと構成のプロパティを取得し、設定します。SettingsPage
から派生させるクラスでは、プロジェクト ファイルのプロジェクトまたは構成のプロパティを永続化するため、Microsoft.VisualStudio.Package.SettingsPage.ApplyChanges
とMicrosoft.VisualStudio.Package.SettingsPage.BindProperties
を実装する必要があります。
ProvideObjectAttribute とレジストリ パス
SettingsPage
から派生したクラスは、VSPackage 間で共有されるように設計されています。 VSPackage で SettingsPage
から派生したクラスを作成できるようにするには、Microsoft.VisualStudio.Shell.Package
から派生したクラスに Microsoft.VisualStudio.Shell.ProvideObjectAttribute
を追加します。
[ProvideObject(typeof(MyProjectPropertyPage))]
[Guid("e815d8ad-49bf-427d-99c8-009db3e56ab9")]
public sealed class MyPackage : Package
属性がどの VSPackage アタッチされているかは重要ではありません。 VSPackage が Visual Studio に登録されると、CreateInstance への呼び出しによってそれを作成できるように、作成できる任意のオブジェクトのクラス ID (CLSID) が登録され ます。
作成可能なオブジェクトのレジストリ パスは、そのオブジェクト型の UserRegistryRoot、ワード、CLSID、GUID を組み合わせて決定されます。 MyProjectPropertyPage
クラスの GUID が {3c693da2-5bca-49b3-bd95-ffe0a39dd723} で、UserRegistryRoot が HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp である場合、レジストリ パスは HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp\CLSID\{3c693da2-5bca-49b3-bd95-ffe0a39dd723} になります。
プロジェクトと構成のプロパティの属性とレイアウト
CategoryAttribute、DisplayNameAttribute、DescriptionAttribute の各属性では、汎用プロパティ ページのプロジェクトと構成のプロパティのレイアウト、ラベル付け、説明を指定します。 これらの属性によって、オプションのカテゴリ、表示名、説明がそれぞれ決定されます。
Note
同等の属性である SRCategory、LocDisplayName、SRDescription では、ローカライズ用の文字列リソースが使用されます。これらは、Visual Studio 2013 のプロジェクト用 MPF で定義されています。
次の コードがあるとします。
public bool IsDirty { get; set; }
private string myConfigProp;
[Category("My Category")]
[DisplayName("My Config Property")]
[Description("My Description")]
public string MyConfigProp
{
get { return myConfigProp; }
set { myConfigProp = value; IsDirty = true; }
}
MyConfigProp
構成プロパティは、[My Category] というカテゴリの [My Config Property] という構成プロパティ ページに表示されます。 このオプションが選択された場合は、説明パネルに「My Description」という説明が表示されます。