在带有 MVC 4 的 Visual Studio 2012 中,简单的方法(安装 Nuget 包)会导致您的设置不完整,因为 Nuget 包已经过时了(最后一次更新是在 2011 年 - 可能是它创建的那一天)。
您必须使用相当于 Francis Shanahan 的答案,但复制内容的路径是(64 位):
C:\Program Files (x86)\Microsoft Visual Studio\11.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates
你:
添加对 Microsoft.Web.Infrastructure 的引用,您可以在“程序集”>“扩展”中找到它。
将此 CodeTemplates 文件夹(包括文件夹本身)复制到项目的根目录并包含在项目中
暂时忽略编译器错误(比如找不到 MvcTextTemplateHost)
检查每个添加文件的属性并删除每个文件的“自定义工具”属性中的文本。当您这样做时,每个文件旁边的展开箭头将消失(因为该文件将不再就地生成)
全部保存并构建 - 编译器错误消失
如果编译器错误没有消失 - 特别是如果您在生成的 .cs 文件中看到错误,Visual Studio 找不到,以及 .tt 文件 - 关闭 Visual Studio,擦除临时文件夹,然后重新打开解决方案。在一种情况下,我什至在问题解决之前重新启动。这是由 Visual Studio 仍在尝试为其自动生成代码的 .tt 模板生成的 .cs 文件引起的。
此外,.tt 文件的名称有点令人困惑 - 以下是它们的映射方式:
图形界面:
空的 MVC 控制器
具有读/写操作和视图的 MVC 控制器,使用实体框架
具有空读/写操作的 MVC 控制器
空 API 控制器
具有读/写操作的 API 控制器,使用实体框架
具有空读/写操作的 API 控制器
CodeTemplates\AddController 的文件分别映射:
控制器.tt
ControllerWithContext.tt
控制器.tt
ApiController.tt
ApiControllerWithContext.tt
ApiController.tt
Controller.tt 和 ApiController.tt 中有一个 if 语句,用于处理有/无读/写操作功能。
对于视图,命名很直观,除了 List.tt 创建 Index.cshtml,Empty.tt 用于除 Create/Delete/Details/Edit/Index 之外的任何 View。
This question covers what properties you can use in the .tt templates.
.tt 模板是 Microsoft T4 模板。 T4 Template Syntax.