支持项目和配置属性

Visual Studio 集成开发环境(IDE)中的“属性”窗口可以显示项目和配置属性。 可以为自己的项目类型提供属性页,以便用户可以为应用程序设置属性。

通过在解决方案资源管理器中选择项目节点,然后单击“项目”菜单上的“属性,可以打开包含项目和配置属性的对话框。 在 Visual C# 和 Visual Basic 中,以及派生自这些语言的项目类型,此对话框在“常规”、“环境”、“选项”对话框中显示为选项卡式页面。 有关详细信息,请参阅“生成:演练:公开项目和配置属性”(C#)。

用于项目的托管包框架(MPFProj)提供用于创建新项目系统的帮助程序类。 可以在 MPF for Projects - Visual Studio 2013 中找到源代码和编译说明。

项目和配置属性的持久性

项目和配置属性保存在与项目类型关联的任何文件扩展名的项目文件中,例如 .csproj、.vbproj 和 .myproj。 语言项目通常使用模板文件生成项目文件。 但是,实际上有多种方法可以关联项目类型和模板。 有关详细信息,请参阅 模板目录说明(。Vsdir) 文件

通过向模板文件添加项来创建项目和配置属性。 然后,这些属性可用于使用使用此模板的项目类型创建的任何项目。 Visual C# 项目和 MPFProj 都对模板文件使用 “不在生成:MSBuild 概述 ”架构。 这些文件具有每个配置的 PropertyGroup 节。 项目的属性通常保存在第一个 PropertyGroup 节中,该节的 Configuration 参数设置为 null 字符串。

以下代码显示了基本 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> 配置属性。

项目负责保留项目文件和配置属性。

注意

项目可以通过仅保留不同于其默认值的属性值来优化持久性。

支持项目和配置属性

Microsoft.VisualStudio.Package.SettingsPage 类实现项目和配置属性页。 向泛型属性网格中的用户提供公共属性的默认实现 SettingsPage 。 该方法 Microsoft.VisualStudio.Package.HierarchyNode.GetPropertyPageGuids 为项目属性网格选择派生自 SettingsPage 的类。 该方法 Microsoft.VisualStudio.Package.ProjectNode.GetConfigPropertyPageGuids 为配置属性网格选择派生自 SettingsPage 的类。 项目类型应重写这些方法以选择适当的属性页。

SettingsPageMicrosoft.VisualStudio.Package.ProjectNode 类提供了以下方法来保存项目和配置属性:

  • Microsoft.VisualStudio.Package.ProjectNode.GetProjectPropertyMicrosoft.VisualStudio.Package.ProjectNode.SetProjectProperty 保留项目属性。

  • Microsoft.VisualStudio.Package.SettingsPage.GetConfigPropertyMicrosoft.VisualStudio.Package.SettingsPage.SetConfigProperty 保留配置属性。

    注意

    类的Microsoft.VisualStudio.Package.SettingsPageMicrosoft.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 不重要。 向 Visual Studio 注册 VSPackage 时,将注册可创建的任何对象的类 ID (CLSID),以便 CreateInstance 调用可以创建它。

可以创建的对象的注册表路径通过组合 UserRegistryRoot、单词、CLSID 和对象类型的 guid 来确定。 如果MyProjectPropertyPage类的 guid 为 {3c693da2-5bca-49b3-bd95-ffe0a39dd723} 且 UserRegistryRoot HKEY_CURRENT_U标准版R\Software\Microsoft\VisualStudio\8.0Exp, 则注册表路径为 HKEY_CURRENT_U标准版R\Software\Microsoft\VisualStudio\8.0Exp\CLSID\{3c693da2-5bca-49b3-bd95-ffe0a39dd723}。

项目和配置属性属性和布局

属性CategoryAttributeDisplayNameAttributeDescriptionAttribute确定泛型属性页中项目和配置属性的布局、标记和说明。 这些属性分别确定选项的类别、显示名称和说明。

注意

等效属性、SRCategory、LocDisplayName 和 SRDescription 使用字符串资源进行本地化,并在 MPF for Projects - Visual Studio 2013定义。

可考虑使用以下 代码段:

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属性在配置属性页上显示为“我的配置属性”类别“中的”我的类别”。 如果选择了该选项,说明“ 我的说明”将显示在说明面板中。