自定义 MVC 模板

作者 :Jacques Eloff

适用于 Visual Studio 2010 的 MVC 3 工具更新版本为 MVC 项目引入了单独的项目向导。 这一变化是由两个因素推动的。 首先,在 MVC 3 中引入新模板以及对其他视图引擎(如 Razor)的支持会导致 Visual Studio 中的“新建项目”对话框过度拥挤。 其次,客户一直在要求扩展点,新的 MVC 项目向导为我们提供了响应这些请求的机会。

添加自定义模板是一个艰巨的过程,依赖于使用注册表使新模板对 MVC 项目向导可见。 新模板的作者必须将它包装在 MSI 中,以确保在安装时创建必要的注册表项。 替代方法是使包含模板的 ZIP 文件可用,并让最终用户手动创建所需的注册表项。

上述两种方法都不理想,因此我们决定利用 VSIX 扩展提供的某些现有基础结构,以便从 MVC 4 for Visual Studio 2012 开始更轻松地创作、分发和安装自定义 MVC 模板。 此方法提供的一些优势包括:

  • VSIX 扩展可以包含多个模板,这些模板支持不同语言 (C# 和 Visual Basic) ,以及 (ASPX 和 Razor) 的多个视图引擎。
  • VSIX 扩展可以面向 Visual Studio 的多个 SKU,包括 Express SKU。
  • Visual Studio 库有助于将扩展分发给广泛的受众。
  • 可以升级 VSIX 扩展,以便更轻松地创作自定义模板的更正和更新。

先决条件

  • 用户需要熟悉创作项目模板,包括 vstemplate 文件所需的标记等。
  • 用户需要安装Visual Studio Professional及更高版本。 Express SKU 不支持创建 VSIX 项目。
  • 已安装 Visual Studio 2012 SDK

示例

第一步是使用 C# 或 Visual Basic 创建新的 VSIX 项目。 选择“ 文件 > 新建项目”,然后单击左窗格中的“ 扩展性 ”,然后选择 VSIX 项目

新建项目

创建项目后,将打开 VSIX 设计器。

项目Designer元数据

设计器可用于编辑扩展的某些常规属性,当用户安装扩展或在 Visual Studio (Tools > Extensions 中浏览已安装的扩展并汇报) 时,将向用户显示这些属性。 完成常规信息后,单击“ 安装目标”选项卡

屏幕截图显示 Project Designer的“安装目标”选项卡。

此选项卡用于指定扩展支持的 SKU 和 Visual Studio 版本。 选中“ 为所有用户安装此 VSIX ”复选框,以启用 VSIX 的每台计算机安装。 单击右侧的“ 新建 ”按钮,添加其他 SKU,例如 Web Developer Express (VWD) 。

添加新安装目标

如果打算支持专业版、高级版和旗舰版 (所有专业版和更高版本的 SKU) 只需在系列中选择最低 SKU ,Microsoft.VisualStudio.Pro。 完成安装目标后,请记得保存所有更改。

屏幕截图显示了 Project Designer的“安装目标”选项卡,其中包含指定的标识符和版本范围。

资产 ”选项卡用于将所有内容文件添加到 VSIX。 由于 MVC 需要自定义元数据,因此你将编辑 VSIX 清单文件的原始 XML,而不是使用“ 资产 ”选项卡添加内容。 首先,将模板内容添加到 VSIX 项目。 文件夹的结构和内容必须镜像项目的布局。 下面的示例包含派生自基本 MVC 项目模板的四个项目模板。 确保构成项目模板的所有文件 (ProjectTemplates 文件夹) 下的所有内容都添加到 VSIX 项目文件中 的 Content 项组中,并且每个项都包含 CopyToOutputDirectoryIncludeInVsix 元数据集,如以下示例所示。

<Content Include=“ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicWeb.config”>

<CopyToOutputDirectory>Always</CopyToOutputDirectory>

<IncludeInVSIX>true</IncludeInVSIX>

</内容>

如果没有,IDE 将在生成 VSIX 时尝试编译模板的内容,并且你可能会看到错误。 模板中的代码文件通常包含实例化项目模板时 Visual Studio 使用的特殊模板 参数 ,因此无法在 IDE 中编译。

“解决方案资源管理器”

关闭 VSIX 设计器,右键单击解决方案资源管理器中的 source.extension.manifest 文件,选择“打开方式”,然后选择“XML (文本) 编辑器”选项。

使用对话框打开

<创建 Assets> 元素,并为必须包含在 VSIX 中的每个文件添加 <Asset> 元素。 每个 <Asset> 元素的 Type 属性必须设置为 Microsoft.VisualStudio.Mvc.Template。 这是只有 MVC 项目向导才能理解的自定义命名空间。 有关清单文件的结构和布局的其他信息,请参阅 VSIX 2.0 架构文档。

仅将文件添加到 VSIX 并不足以向 MVC 向导注册模板。 你需要向 MVC 向导提供模板名称、说明、支持的视图引擎和编程语言等信息。 此信息包含在与每个 vstemplate 文件的 Asset> 元素关联的<自定义属性中。

<Asset d:VsixSubPath=“ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx”

Type=“Microsoft.VisualStudio.Mvc.Template”

d:Source=“File”

Path=“ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicMvcWebApplicationProjectTemplate.11.csaspx.vstemplate”

ProjectType=“MVC”

Language=“C#”

ViewEngine=“Aspx”

TemplateId=“MyMvcApplication”

Title=“Custom Basic Web Application”

Description=“从基本 MVC Web 应用程序派生的自定义模板 (Razor) ”

Version=“4.0”/>

下面是必须存在的自定义属性的说明:

  • ProjectType 必须设置为 MVC。
  • 语言 指定模板支持的开发语言。 有效值为 C# 或 VB。
  • ViewEngine 指定模板支持的视图引擎,例如 Aspx 或 Razor。 可以为此字段指定自定义值。
  • TemplateId 用于对模板进行分组。 如果值与现有模板 ID 匹配,它将替代以前在 MVC 向导中注册的模板。
  • 标题 指定在每个项目模板下的 MVC 向导中显示的简短说明。
  • 说明 指定模板的更详细说明。

将所有文件添加到清单并保存后,你会注意到设计器中的“资产”选项卡将显示所有文件,但不会显示添加到 <vstemplate 文件的 Asset> 元素中的自定义属性。

项目Designer资产

现在剩下的就是编译 VSIX 项目并安装它。

确保在要测试 VSIX 扩展的计算机上关闭 Visual Studio 的所有实例。 Visual Studio 会在启动期间扫描新的扩展,因此,如果在安装 VSIX 时 IDE 处于打开状态,则需要重启 Visual Studio。 在资源管理器中,双击 VSIX 文件以启动 VSIX 安装程序,单击“ 安装 ”,然后启动 Visual Studio。

VSIX 安装程序

从菜单中,选择“工具>”“扩展并汇报”以确认扩展已安装。 如果 VSIX 安装程序在安装扩展期间报告了任何错误,可以查看 VSIX 安装程序日志以了解详细信息。 日志通常在安装扩展的用户的 %temp% 文件夹中创建,例如 C:\Users\Bob\AppData\Local\Temp

扩展和汇报

关闭窗口后,可以创建一个 MVC 4 项目,以查看新模板是否显示在 MVC 向导中。

新的 ASP.NET MVC 4 项目

限制

  1. MVC 向导不支持本地化的自定义模板。
  2. 如果向导找不到自定义模板,则不会报告任何错误。 如果缺少任何必需的自定义属性,则只需从向导中排除该模板。