注册项目类型

创建新项目类型时,必须创建注册表项,使 Visual Studio 能够识别和使用项目类型。 通常使用注册表脚本 (.rgs) 文件创建这些注册表项。

在下面的示例中,注册表中的语句提供默认路径和数据(如果适用),后跟一个表,其中包含每个语句的注册表脚本中的条目。 这些表提供有关语句的脚本条目和其他信息。

注释

以下注册表信息旨在作为要写入以注册项目类型的注册表脚本中的条目的类型和目的的示例。 实际条目及其使用可能会因项目类型的特定要求而异。 应查看可用的示例,找到与正在开发的项目类型非常相似的示例,然后查看该示例的注册表脚本。

以下示例来自HKEY_CLASSES_ROOT。

示例 1

\.figp
   @="FigPrjFile"
   "Content Type"="text/plain"
\.figp\ShellNew
   "NullFile"=""
\FigPrjFile
   @="Figure Project File"
\DefaultIcon
   @="<Visual Studio SDK installation path>\\9.0VSIntegration\\SomeFolder\\FigPkgs\\FigPrj\\Debug\\FigPrj.dll,-206"
\shell\open
   @="&Open in Visual Studio"
\shell\open\command
   @="devenv.exe \"%1\""
Name 类型 Data Description
@ REG_SZ FigPrjFile 扩展名为 .figp 的项目类型文件的名称和说明。
Content Type REG_SZ Text/plain 项目文件的内容类型。
NullFile REG_SZ Null
@ REG_SZ %MODULE%,-206 用于此类型的项目的默认图标。 %MODULE% 语句在注册表中被设定到项目类型 DLL 的默认位置。
@ REG_SZ &Open in Visual Studio 将打开此项目类型的默认应用程序。
@ REG_SZ devenv.exe "%1" 打开此类型的项目时将运行的默认命令。

以下示例来自HKEY_LOCAL_MACHINE,位于键 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\99.0Exp\Packages] 下的注册表中。

示例 2

\{ACEF4EB2-57CF-11D2-96F4-000000000000} (The CLSID for the VSPackage)
   @="FigPrj Project Package"
   "InprocServer32"="9.0<Visual Studio SDK installation path>\\VSIntegration\\Archive\\FigPkgs\\FigPrj\\                      Debug\\FigPrj.dll"
   "CompanyName"="Microsoft"
   "ProductName"="Figure Project Sample"
   "ProductVersion"="9.0"
   "MinEdition"="professional"
   "ID"=dword:00000001
\{ACEF4EB2-57CF-11D2-96F4-000000000000}\SatelliteDLL
   "DllName"="FigPrjUI.dll"
   "Path"="9.0<Visual Studio SDK installation path>\\VSIntegration\\Archive\\FigPkgs\\FigPrj\\Debug\\"
\{ACEF4EB2-57CF-11D2-96F4-000000000000}\Automation
   "FigProjects"=""
\{ACEF4EB2-57CF-11D2-96F4-000000000000}\AutomationEvents
   "FigProjectsEvents"="Returns the FigProjectsEvents Object"
   "FigProjectItemsEvents"="Returns the FigProjectItemsEvents Object"
Name 类型 Data Description
@ (默认) REG_SZ FigPrj Project VSPackage 此已注册的 VSPackage(项目类型)的可本地化名称。
InprocServer32 REG_SZ %MODULE% 项目类型 DLL 的路径。 IDE 加载此 DLL,并将 VSPackage CLSID 传递给DllGetClassObject以获取IClassFactory来构造IVsPackage对象。
CompanyName REG_SZ Microsoft 开发项目类型的公司的名称。
ProductName REG_SZ Figure Project Sample 项目类型的名称。
ProductVersion REG_SZ 9.0 项目类型发布版本的版本号。
MinEdition REG_SZ professional 要注册的 VSPackage 版本。
ID REG_DWORD %IDS_PACKAGE_LOAD_KEY% 项目 VSPackage 的包加载密钥。 当环境启动后加载项目时,将验证密钥。
DllName REG_SZ %RESOURCE_DLL% 包含项目类型的本地化资源的附属 DLL 的文件名。
Path REG_SZ %RESOURCE_PATH% 卫星 DLL 的路径。
FigProjectsEvents REG_SZ 请查看语句以获取值。 确定为此自动化事件返回的文本字符串。
FigProjectItemsEvents REG_SZ 请参阅价值说明。 确定为此自动化事件返回的文本字符串。

以下示例都位于注册表项 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Projects] 下的注册表中。

示例 3

\{C061DB26-5833-11D2-96F5-000000000000} (The CLSID for projects of this type)
   @="FigPrj Project"
   "DisplayName"="#2"
   "Package"="{ACEF4EB2-57CF-11D2-96F4-000000000000}"
   "ProjectTemplatesDir"="C:\\Program Files\\VSIP 9.0\\EnvSDK\\FigPkgs\\                           FigPrj\\FigPrjProjects"
   "ItemTemplatesDir"="<Visual Studio SDK installation path>\\VSIntegration\\Archive9.0\\FigPkgs\\FigPrj\\                           FigPrjProjectItems"
   "DisplayProjectFileExtensions"="#3"
   "PossibleProjectExtensions"="figp"
   "DefaultProjectExtension"=".figp"
\{C061DB26-5833-11D2-96F5-000000000000}\Filters\1       (Folder 1 contains settings for Open Files filters.)
   @="#4"
   "CommonOpenFilesFilter"=dword:00000000
   "CommonFindFilesFilter"=dword:00000000
   "NotAddExistingItemFilter"=dword:00000000
   "FindInFilesFilter"=dword:00000000
   "NotOpenFileFilter"=dword:00000000
   "SortPriority"=dword:000003e8
\{C061DB26-5833-11D2-96F5-000000000000}\Filters\2
      (Folder 2 contains settings for Find in Files filters.)
   @="#5"
   "CommonOpenFilesFilter"=dword:00000000
   "CommonFindFilesFilter"=dword:00000000
   "NotAddExistingItemFilter"=dword:00000001
   "FindInFilesFilter"=dword:00000001
   "NotOpenFileFilter"=dword:00000000
   "SortPriority"=dword:000003e8
\{C061DB26-5833-11D2-96F5-000000000000}\AddItemTemplates\TemplateDirs\ {ACEF4EB2-57CF-11D2-96F4-000000000000}\1 (Second GUID indicates the registered project type for the Add Items templates.)
   @="#6"
   "TemplatesDir"="<Visual Studio SDK installation path>\\VSIntegration\\Archive9.0\\FigPkgs\\FigPrj\\                    FigPrjProjectItems"
   "SortPriority"=dword:00000064
Name 类型 Data Description
@ REG_SZ FigPrj Project 此类型的项目的默认名称。
DisplayName REG_SZ #%IDS_PROJECT_TYPE% 从注册在 Packages 下的卫星 DLL 中检索名称的资源 ID。
Package REG_SZ %CLSID_Package% 在包下注册的 VSPackage 的类 ID。
ProjectTemplatesDir REG_SZ %TEMPLATE_PATH%\FigPrjProjects 项目模板文件的默认路径。 这些文件由“新建项目”模板显示。
ItemTemplatesDir REG_SZ %TEMPLATE_PATH% \FigPrjProjectItems 项目项模板文件的默认路径。 这些文件由“添加新项”模板显示。
DisplayProjectFileExtensions REG_SZ #%IDS_DISPLAY_PROJ_FILE_EXT% 使 IDE 能够实现 “打开 ”对话框。
PossibleProjectExtensions REG_SZ figp 由 IDE 用来确定正在打开的项目是否由此项目类型(项目工厂)处理。 多个条目的格式是分号分隔的列表。 例如“vdproj;vdp“.
DefaultProjectExtension REG_SZ .figp IDE 用作“另存为”操作中的默认文件扩展名。
Filter Settings REG_DWORD 各种,请参阅下表中的语句和注释。 这些设置用于设置用于在 UI 对话框中显示文件的各种筛选器。
@ REG_SZ #%IDS_ADDITEM_TEMPLATES_ENTRY% 添加项模板的资源 ID。
TemplatesDir REG_SZ %TEMPLATE_PATH%\FigPrjProjectItems 添加新项 ”模板对话框中显示的项目项的路径。
SortPriority REG_DWORD 100 (vcprx64) 确定“ 添加新项 ”对话框中显示的文件树节点中的排序顺序。

下表显示了上一代码段中可用的筛选器选项。

筛选器选项 Description
CommonFindFilesFilter 指示筛选器是“ 在文件中查找 ”对话框中的常用筛选器之一。 在未标记为通用的筛选器之前,公共筛选器将列在筛选器列表中。
CommonOpenFilesFilter 指示筛选器是 “打开文件 ”对话框中的常用筛选器之一。 常用筛选器会列在未标记为常用的筛选器之前的筛选器列表中。
FindInFilesFilter 指示筛选器将是“在 文件中查找 ”对话框中的筛选器之一,并将在常用筛选器后列出。
NotOpenFileFilter 指示筛选器不会在 “打开文件 ”对话框中使用。
NotAddExistingItemFilter 指示筛选器不会在“添加 现有项 ”对话框中使用。

默认情况下,如果筛选器没有设置其中一个或多个标志,则会在列出常用筛选器后,在 “添加现有项 ”对话框中和 “打开文件 ”对话框中使用该筛选器。 筛选器未在“ 在文件中查找 ”对话框中使用。

以下示例都位于注册表项 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Projects] 下的注册表中。

示例 4

{FE3BBBB6-72D5-11d2-9ACE-00C04F79A2A4} (The CLSID for Enterprise Projects)
\{FE3BBBB6-72D5-11d2-9ACE-00C04F79A2A4}\AddItemTemplates\TemplateDirs\ {ACEF4EB2-57CF-11D2-96F4-000000000000}\1 (CLSID for projects of this type)
   @="#7"
   "TemplatesDir"="<Visual Studio SDK installation path>\\VSIntegration\\Archive9.0\\FigPrj\\FigPrjProjects"
   "SortPriority"=dword:00000029
   "NewProjectDialogOnly"=dword:00000000
Name 类型 Data Description
@ REG_SZ #%IDS_NEWPROJ_ TEMPLATES_ENTRY% 新建项目模板的资源 ID。
TemplatesDir REG_SZ %TEMPLATE_PATH%\FigPrjProjects 已注册项目类型的项目的默认路径。
SortPriority REG_DWORD 41 (x29) 设置“新建项目”向导对话框中显示的项目的排序顺序。
NewProjectDialogOnly REG_DWORD 0 0 表示此类型的项目仅显示在“新建项目”对话框中。

以下示例都位于注册表项 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Projects] 下的注册表中。

示例 5

\{A2FE74E1-B743-11d0-AE1A-00A0C90FFFC3} (CLSID for Miscellaneous Files projects)
   @="Miscellaneous Files Project"
\AddItemTemplates\TemplateDirs\{ACEF4EB2-57CF-11D2-96F4-000000000000}\1
                                 (CLSID for Figures Project projects)
   @="#6"
   "TemplatesDir"="<Visual Studio SDK installation path>\\VSIntegration\\Archive9.0\\FigPkgs\\FigPrj\\                    FigPrjProjectItems"
   "SortPriority"=dword:00000064
Name 类型 Data Description
@ REG_SZ None 默认值,指示以下条目适用于杂项文件项目条目。
@ REG_SZ #%IDS_ADDITEM_TEMPLATES_ENTRY% “添加新项”模板文件的资源 ID 值。
TemplatesDir REG_SZ %TEMPLATE_PATH%\FigPrjProjectItems 将在“ 添加新项 ”对话框中显示的项的默认路径。
SortPriority REG_DWORD 100 (vcprx64) 建立排序顺序,以便在“ 添加新项 ”对话框的树节点中显示。

以下示例位于键 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Menus] 下的注册表中。

示例 6

"{ACEF4EB2-57CF-11D2-96F4-000000000000}"=",1000,1"

菜单入口将 IDE 指向用于检索菜单信息的资源。 将此数据合并到菜单数据库中时,注册表的 MenuMerged 部分将添加相同的键。 VSPackage 不应直接修改 MenusMerged 节下的任何内容。 在下表中的“数据”字段中,有三个逗号分隔字段。 第一个字段标识菜单资源文件的完整路径:

  • 如果省略第一个字段,则从 VSPackage GUID 标识的附属 DLL 加载菜单资源。

    第二个字段标识 CTMENU 类型的菜单资源 ID:

  • 如果指定了资源 ID,并且文件路径由第一个参数提供,则从完整文件路径加载菜单资源。

  • 如果提供了资源 ID,但没有提供文件路径,则从卫星 DLL 加载菜单资源。

  • 如果提供了完整的文件路径并省略资源 ID,则要加载的文件应为 CTO 文件。

    最后一个字段标识 CTMENU 资源的版本号。 可以通过更改版本号再次合并菜单。

Name 类型 Data Description
%CLSID_Package% REG_SZ ,1000,1 用于检索菜单信息的资源。

以下示例都位于注册表项 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\NewProjectTemplates] 下的注册表中。

\TemplateDirs\{ACEF4EB2-57CF-11D2-96F4-000000000000}\1                (CLSID for Figures Project projects)
   @="#7"
   "TemplatesDir"="<Visual Studio SDK installation path>\\VSIntegration\\Archive9.0\\FigPkgs\\FigPrj\\FigPrjProjects"
   "SortPriority"=dword:00000029
   "NewProjectDialogOnly"=dword:00000000
Name 类型 Data Description
@ REG_SZ #%IDS_NEWPROJ_TEMPLATES_ENTRY% 图形项目新建项目模板的资源ID值。
TemplatesDir REG_SZ %TEMPLATE_PATH%\FigPrjProjects 新建项目目录的默认路径。 此目录中的项将显示在“ 新建项目”向导 对话框中。
SortPriority REG_DWORD 41 (x29) 建立将在 “新建项目 ”对话框的树节点中显示的项目的顺序。
NewProjectDialogOnly REG_DWORD 0 0 表示此类型的项目仅显示在“ 新建项目 ”对话框中。

以下示例位于键 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\InstalledProducts] 下的注册表中。

\FiguresProductSample
   "Package"="{ACEF4EB2-57CF-11D2-96F4-000000000000}"
   "UseInterface"=dword:00000001
Name 类型 Data Description
Package REG_SZ %CLSID_Package% 已注册的 VSPackage 的类 ID。
UseInterface REG_DWORD 1 1 表示 UI 将用于与此项目交互。 0 表示没有 UI 接口。

控制新项目类型的 .vsz 文件经常包含RELATIVE_PATH项。 此路径相对于以下安装程序键中项目类型的 \ProductDir 条目下指定的路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.0Exp\Setup

例如,Enterprise Frameworks 项目模板添加以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.0Exp\Setup\EF\ProductDir = C:\Program Files\Microsoft Visual Studio\EnterpriseFrameworks\

这意味着,如果在 .vsz 文件中包括 PROJECT_TYPE=EF 条目,环境将查找之前指定的 ProductDir 目录中的 .vsz 文件。