如何在ASP.NET MVC 3中创建自己的脚手架模板?

时间:2011-01-14 14:53:12

标签: asp.net-mvc asp.net-mvc-3

ASP.NET MVC提供了选择新创建的视图所基于的“脚手架模板”的功能(添加视图>创建强类型视图>脚手架模板)。

是否可以创建自己的脚手架模板?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:33)

ASP.NET MVC使用T4模板。 Here's an overview

以下是步骤:

  1. 在程序包管理器控制台中键入:install-package mvc3codetemplatescsharp
  2. 接受所有警告
  3. CodeTemplates文件夹将添加到包含模板
  4. 的项目中

    从这里您可以修改现有模板或添加新模板。

    或者,如果您想全局修改,可以在C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates\文件夹中进行修改。

答案 1 :(得分:11)

当然,您可以在没有nuget的情况下使用T4:将文件夹放在应用程序网站的根目录中(包含视图的项目)。目录结构很重要,因此它应该是

\ CodeTemplates \ AddView \ AspxCsharp \ MyTemplate.tt

您可以复制位于C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Web \ MVC 3 \ CodeTemplates \

中的现有模板之一的内容

接下来,清除名为“Custom Tool”的TT文件上的属性。这应该是空白的。

然后右键单击任何“控制器操作”并说“添加视图”,或者由于控制器位于我们的单独项目中,右键单击“查看”文件夹并单击“添加视图”。

从下拉列表中单击“创建强类型视图”,然后在“查看数据类:”下输入要使用的类型

最后,在“查看内容”下拉列表中,选择“MyTempate”。如果您已正确输入文件夹,则应显示此信息。

答案 2 :(得分:4)

在带有MVC 4的Visual Studio 2012中,简单的方法(安装Nuget包)会让您得到一个不完整的设置,因为Nuget包已经过时了(最后一次更新于2011年 - 也许是它创建的那天)。 p>

你必须使用相当于Francis Shanahan的答案,而是复制东西的路径是(64位):

C:\ Program Files(x86)\ Microsoft Visual Studio \ 11.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Web \ MVC 4 \ CodeTemplates

您:

  1. 添加对Microsoft.Web.Infrastructure的引用,您可以在Assemblies中找到它>扩展

  2. 将此CodeTemplates文件夹(包括文件夹本身)复制到项目的根目录并将其包含在项目中

  3. 暂时忽略编译错误(就像找不到MvcTextTemplateHost一样)

  4. 浏览每个添加文件的属性,并删除每个文件的“自定义工具”属性中的文本。当你这样做时,每个文件旁边的展开箭头将消失(因为该文件将不再就地生成)

  5. 全部保存并构建 - 编译器错误消失

  6. 如果编译器错误没有消失 - 特别是如果你在生成的.cs文件中看到错误,Visual Studio找不到,而.tt文件 - 关闭Visual Studio,擦除你的临时文件夹,重新打开解决方案。在一个案例中,我甚至在问题解决之前重新启动。它是由.tt模板中生成的.cs文件引起的,Visual Studio仍在尝试自动生成代码。

    此外,.tt文件的名称有点令人困惑 - 这是他们映射的方式:

    GUI:

    清空MVC控制器
    具有读/写操作和视图的MVC控制器,使用实体框架
    具有空读/写动作的MVC控制器
    空API控制器
    具有读/写操作的API控制器,使用实体框架
    具有空读/写操作的API控制器

    CodeTemplates \ AddController的文件分别映射:

    Controller.tt
    ControllerWithContext.tt
    Controller.tt
    ApiController.tt
    ApiControllerWithContext.tt
    ApiController.tt

    在Controller.tt和ApiController.tt中有一个if语句,它处理带/不带读/写动作的功能。

    对于视图,命名是直观的,除了List.tt创建Index.cshtml,而Empty.tt用于创建/删除/详细信息/编辑/索引之外的任何视图。

    This question covers what properties you can use in the .tt templates

    .tt模板是Microsoft T4模板。 T4 Template Syntax

答案 3 :(得分:2)

或者,对于32位系统上的Visual Web Developer Express,这些文件的另一个位置是C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ VWDExpress \ ItemTemplates \ CSharp \ Web \ MVC 3 \ CodeTemplates

答案 4 :(得分:0)

这篇MSDN文章讨论了脚手架和页面模板: http://msdn.microsoft.com/en-us/library/cc488540.aspx

反过来,链接到以下文章以修改模板: http://msdn.microsoft.com/en-us/library/cc488537.aspx