新项目生成:在后台下,第一部分

考虑如何创建项目类型? 想知道发生的情况实际上,当您创建新项目? 我们将偷看在后台下并查看您的发生。

在 Visual Studio 为您针对的任务:

  • 它显示所有可用的项目类型树。

  • 它显示应用程序模板列表中每个项目类型的可选择一。

  • 它收集应用程序的项目信息,例如项目名称和路径。

  • 它将此信息添加到项目工厂。

  • 它生成项目项和文件夹在当前解决方案。

新建项目 " 对话框

,也可以对新项目,选择项目类型其所有开始。 我们通过单击 新建项目 开始在 文件 菜单。 新建项目 出现对话框,类似于:

“新建项目”对话框

我们仔细。 项目类型 树列表可以创建的各种项类型。 如果您选择一个项类型时,如 Visual C# windows,您将看到应用程序模板获取列表您启动。 Visual Studio 安装Visual Studio 已安装的模板 并可供您的计算机的所有用户。 在创建或集合的新模板可以添加到 我的模板 并仅供您使用。

当您选择与 Windows 应用程序时的模板,应用程序类型的声明将出现在对话框;在这种情况下, 用于创建具有 Windows 用户界面的应用程序的项目

新建项目 对话框底部,您将看到已收集更多信息的几个控件。 您将看到取决于项目类型的控件,但是,它们通常包含项目 名称升级过程中或新数据库需要 -ra 参数 文本框、 位置 文本框和相关 浏览 按钮和 解决方案名称 文本框和相关 创建解决方案的目录 复选框。

填充新项 " 对话框

新建项目 对话框获取位置其信息从? 有两种机制在工作在这里,其中一个已弃用。 新建项目 对话框合并和显示两个结构获得的信息。

旧的 (已否决) 方法使用系统注册表项和 .vsdir 文件。 ,在 Visual Studio 中打开的,则此 framework 上运行。 更新的方法使用 .vstemplate 文件。 此机制运行,例如时,时, Visual Studio 通过运行初始化

devenv /setup

devenv /installvstemplates

项目类型

例如, Visual C#其他语言,系统注册表项依赖 项目类型 根节点的位置和名称。 子节点的组织,例如 数据库智能设备,反射包含对应的 .vstemplate 文件文件夹的层次结构。 我们首先查看根节点。

项类型根节点

当 Visual Studio 初始化时,在遍历系统注册表项 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ NewProjectTemplates \ TemplateDirs 的子项生成和命名 项目类型 树的根节点。 缓存在此信息供以后使用。 查看 TemplateDirs \ {000…000} FAE04EC1-301F-11D3-BF4B-00C04F79EFBC} \ /1 键。 每项是 VSPackage GUID。 子键的名称 (/1),将忽略,但其存在指示这是 项目类型 根节点。 根节点而让控件其在 项目类型 树的外观的若干子级。 我们将查看一些。

(默认值)

这称为根节点本地化的字符串的资源 ID。 字符串资源位于 VSPackage GUID 选择附属 DLL。

在此示例中, VSPackage GUID 为

{} FAE04EC1-301F-11D3-BF4B-00C04F79EFBC

和资源 ID (默认值) 根节点 (/1) 是 #2345

如果您查找在周围的包键的 GUID 并检查 SatelliteDll 子级,您可以找到包含字符串资源程序集的路径:

<Visual Studio 安装路径> \ VC# \ VCSPackages \ 1033 \ csprojui.dll

若要验证此操作,请打开文件 Explorer 并拖动 csprojui.dll 到 Visual Studio 内容。 字符串表表示,资源 #2345 一个声明 Visual C#

SortPriority

这将确定根节点的位置。 项目类型 树。

SortPriority REG_DWORD 0x00000014 (20)

越低优先级,越大的数字在树的位置。

DeveloperActivity

如果此子存在,则根节点的位置由开发人员设置对话框控件的。 例如,

DeveloperActivity REG_SZ VC#

指示 Visual C# 将是根节点,如果 Visual Studio 为 Visual C++ 开发设置。 否则,它将是 其他语言子节点。

文件夹

如果此子存在,则根节点将成为指定文件夹中的子节点。 可能的文件夹列表显示在项下。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ NewProjectTemplates \ PseudoFolders

例如,数据库项目项包括在 PseudoFolders 与其他项目类型项中的文件夹键。 因此,在 项目类型 树, 数据库项目 将是 其他项目类型子节点。

项类型子节点和 .vstdir 文件

子节点的位置。 项目类型 树遵循文件夹的层次结构在 ProjectTemplates 文件夹中。 对于设备模板 (Visual Studio 已安装的模板),典型位置为 \ program files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ ProjectTemplates \,并为用户模板 (我的模板),典型位置为 \ my documents \ Visual Studio 10 \ templates \ ProjectTemplates \。 从这两个位置的文件夹层次结构合并创建 项目类型 树。

为了与 Visual C++ 开发人员设置的 Visual Studio, 项目类型 树看起来类似于下面这样:

项目类型

对应的 ProjectTemplates 文件夹如下所示:

项目模板

新建项目 对话框打开时, Visual Studio 遍历 ProjectTemplates 文件夹并重新创建其在 项目类型 树的结构与这些更改:

  • 应用程序模板取决于 项目类型 树的根节点。

  • 节点名称本地化并且可以包含特殊字符。

  • 可以更改排序顺序。

查找项类型的根节点

当 Visual Studio 遍历 ProjectTemplates 文件夹时,将打开任何一个 .zip 文件并提取所有 .vstemplate 文件。 .vstemplate 文件使用 XML 描述应用程序模板。 有关更多信息,请参见 新项目生成:在后台下,第二部分

<ProjectType> 标记以确定应用程序的项目类型。 例如, \ CSharp \ SmartDevice \ WindowsCE \ 1033 \ WindowsCE-EmptyProject.zip 文件包含此标记的一 EmptyProject.vstemplate 文件:

<ProjectType>CSharp</ProjectType>

<ProjectType> 标记而不是子文件夹位于 ProjectTemplates 文件夹,确定应用程序的根节点在 项目类型 树。 在此示例中, Windows CE 应用程序将显示在 Visual C# 根节点下,,因此,即使您将移动 WindowsCE 文件夹移到 Visual Basic 文件夹, Windows CE 应用程序将显示在 Visual C# 根节点下。

本地化节点名称

当 Visual Studio 遍历 ProjectTemplates 文件夹时,会找到以检查所有 .vstdir 文件。 .vstdir 文件是控制项目外观输入 新建项目 对话框的 XML 文件。 在 .vstdir 文件,请使用 <LocalizedName> 标记命名 项目类型 节点。

例如, \ CSharp \ \ TemplateIndex.vstdir 数据库文件包含此标记:

<LocalizedName Package="{462b036f-7349-4835-9e21-bec60e989b9c}" ID="4598"/>

这将确定命名根节点,在这种情况下, 数据库本地化的字符串的附属 DLL 和资源 ID。 该本地化名称可以包含的文件夹名称不可用特殊字符,例如 .NET

如果 <LocalizedName> 标记不存在,项目类型由该文件夹, SmartPhone2003名为的。

查找项类型的排序顺序。

若要确定项目类型的排序顺序, .vstdir 文件使用 <SortOrder> 标记。

例如, \ CSharp \ windows \ Windows.vstdir 文件包含此标记:

<SortOrder>5</SortOrder>

\ CSharp \ \ TemplateIndex.vstdir 数据库文件与最大值的标记:

<SortOrder>5000</SortOrder>

越低在 <SortOrder> 标记,越大在树的位置,因此, 窗口 节点的数字大于在 项目类型 树的 数据库 显示节点。

如果 <SortOrder> 标记未对项目类型指定,按字母顺序显示在包含 <SortOrder> 规范的任何项目类型后。

注意不在 " 我的 .vstdir 文档 (我的模板) 文件夹。 用户应用程序类型名称按字母顺序不本地化且不会显示在中。

快速检查

我们修改 新建项目 对话框并创建新的用户项模板。

  1. 添加一个 MyProjectNode 子文件夹添加到 \ program files \ Microsoft Visual Studio 10 \ Common7 \ IDE \ ProjectTemplates \ CSharp 文件夹。

  2. 使用任何文本编辑器,创建一 MyProject.vstdir 文件在 MyProjectNode 文件夹。

  3. 将以下各行添加到 .vstdir 文件:

    <TemplateDir Version="1.0.0">
        <SortOrder>6</SortOrder>
    </TemplateDir>
    
  4. 保存并关闭 .vstdir 文件。

  5. 使用任何文本编辑器,创建一 MyProject.vstemplate 文件在 MyProjectNode 文件夹。

  6. 将以下各行添加到 .vstemplate 文件:

    <VSTemplate Version="2.0.0" Type="Project" xmlns="https://schemas.microsoft.com/developer/vstemplate/2005">
        <TemplateData>
            <ProjectType>CSharp</ProjectType>
        </TemplateData>
    </VSTemplate>
    
  7. 保存 the.vstemplate 文件并关闭编辑器。

  8. 发送 .vstemplate 文件添加到新的压缩 MyProjectNode \ MyProject.zip 文件夹。

  9. 从 Visual Studio 命令窗口,请键入:

    devenv /installvstemplates
    

打开 Visual Studio。

  1. 打开 新建项目 对话框并展开 Visual C# 项目节点。

MyProjectNode

MyProjectNode 显示为 Visual C# 子节点在窗口中节点下。

请参见

概念

新项目生成:在后台下,第二部分