次の方法で共有


プロジェクトおよび構成プロパティのサポート

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.GetProjectPropertyMicrosoft.VisualStudio.Package.ProjectNode.SetProjectProperty ではプロジェクトのプロパティを永続化します。

  • Microsoft.VisualStudio.Package.SettingsPage.GetConfigPropertyMicrosoft.VisualStudio.Package.SettingsPage.SetConfigProperty では構成のプロパティを永続化します。

    Note

    Microsoft.VisualStudio.Package.SettingsPage クラスと Microsoft.VisualStudio.Package.ProjectNode クラスの実装では、Microsoft.Build.BuildEngine (MSBuild) メソッドを使用して、プロジェクト ファイルからプロジェクトと構成のプロパティを取得し、設定します。

    SettingsPage から派生させるクラスでは、プロジェクト ファイルのプロジェクトまたは構成のプロパティを永続化するため、Microsoft.VisualStudio.Package.SettingsPage.ApplyChangesMicrosoft.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} になります。

プロジェクトと構成のプロパティの属性とレイアウト

CategoryAttributeDisplayNameAttributeDescriptionAttribute の各属性では、汎用プロパティ ページのプロジェクトと構成のプロパティのレイアウト、ラベル付け、説明を指定します。 これらの属性によって、オプションのカテゴリ、表示名、説明がそれぞれ決定されます。

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」という説明が表示されます。