自定义 MVC 模板
适用于 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 设计器。
设计器可用于编辑扩展的某些常规属性,当用户安装扩展或在 Visual Studio (Tools > Extensions 中浏览已安装的扩展并汇报) 时,将向用户显示这些属性。 完成常规信息后,单击“ 安装目标”选项卡。
此选项卡用于指定扩展支持的 SKU 和 Visual Studio 版本。 选中“ 为所有用户安装此 VSIX ”复选框,以启用 VSIX 的每台计算机安装。 单击右侧的“ 新建 ”按钮,添加其他 SKU,例如 Web Developer Express (VWD) 。
如果打算支持专业版、高级版和旗舰版 (所有专业版和更高版本的 SKU) 只需在系列中选择最低 SKU ,Microsoft.VisualStudio.Pro。 完成安装目标后,请记得保存所有更改。
“ 资产 ”选项卡用于将所有内容文件添加到 VSIX。 由于 MVC 需要自定义元数据,因此你将编辑 VSIX 清单文件的原始 XML,而不是使用“ 资产 ”选项卡添加内容。 首先,将模板内容添加到 VSIX 项目。 文件夹的结构和内容必须镜像项目的布局。 下面的示例包含派生自基本 MVC 项目模板的四个项目模板。 确保构成项目模板的所有文件 (ProjectTemplates 文件夹) 下的所有内容都添加到 VSIX 项目文件中 的 Content 项组中,并且每个项都包含 CopyToOutputDirectory 和 IncludeInVsix 元数据集,如以下示例所示。
<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> 元素中的自定义属性。
现在剩下的就是编译 VSIX 项目并安装它。
确保在要测试 VSIX 扩展的计算机上关闭 Visual Studio 的所有实例。 Visual Studio 会在启动期间扫描新的扩展,因此,如果在安装 VSIX 时 IDE 处于打开状态,则需要重启 Visual Studio。 在资源管理器中,双击 VSIX 文件以启动 VSIX 安装程序,单击“ 安装 ”,然后启动 Visual Studio。
从菜单中,选择“工具>”“扩展并汇报”以确认扩展已安装。 如果 VSIX 安装程序在安装扩展期间报告了任何错误,可以查看 VSIX 安装程序日志以了解详细信息。 日志通常在安装扩展的用户的 %temp% 文件夹中创建,例如 C:\Users\Bob\AppData\Local\Temp。
关闭窗口后,可以创建一个 MVC 4 项目,以查看新模板是否显示在 MVC 向导中。
限制
- MVC 向导不支持本地化的自定义模板。
- 如果向导找不到自定义模板,则不会报告任何错误。 如果缺少任何必需的自定义属性,则只需从向导中排除该模板。