如何在Visual Studio 2017中创建自定义Scaffolding并替换原有模板与控制器?
嘿,我刚好在VS2017里折腾过自定义Scaffolding模板,给你整理一套亲测有效的步骤,帮你替换掉默认的Scaffolding:
一、先找到VS2017的默认Scaffolding模板位置
首先得定位到VS2017自带的模板目录,路径大概是:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates
(如果你的VS是Professional或Enterprise版本,把路径里的Community换成对应的版本名就行)
建议先把默认的Controller模板文件夹复制一份,重命名成CustomControllerTemplate,这样可以基于现有模板修改,省得从零开始写。
二、修改模板的T4代码文件
打开复制后的模板文件夹里的Controller.cshtml(这是T4模板文件),根据你的需求修改生成逻辑:
- 比如把默认继承的
Controller改成你自己的BaseController:
public class <#= ControllerName #>Controller : BaseController
- 可以添加自定义的
using语句,比如:
using MyProject.Core.Logging; using MyProject.Core.Exceptions;
- 还能给控制器统一添加日志注入、异常处理逻辑,比如在构造函数里注入日志服务:
private readonly ILogger _logger; public <#= ControllerName #>Controller(ILogger logger) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
注意:T4模板里的<#= 变量名 #>是用来输出动态内容的,<# 代码块 #>用来写逻辑判断,比如循环生成Action方法之类的,得熟悉T4的语法哦
三、配置模板的元信息(template.json)
打开模板文件夹里的template.json,修改成你的自定义模板信息,比如:
{ "Name": "自定义基础控制器", "Description": "生成继承自BaseController并包含日志注入的控制器", "TemplateType": "MvcController", "DefaultName": "CustomController", "RequiredParameters": [ { "Name": "ControllerName", "DisplayName": "控制器名称", "Type": "System.String" } ] }
这个配置会让VS在脚手架选项里显示你的自定义模板名称和描述。
四、注册模板并重启VS
把修改好的CustomControllerTemplate文件夹放回刚才的Templates目录里,然后重启Visual Studio 2017。
五、测试自定义Scaffolding
打开你的MVC项目,右键Controllers文件夹,选择「添加」→「新建搭建项」,就能看到你刚才配置的自定义模板选项了。选择它,输入控制器名称,点击确定,就能生成符合你需求的控制器啦!
一些额外的小提示
- 一定要备份原模板文件夹,万一改坏了还能恢复
- 如果需要更复杂的生成逻辑(比如根据数据库表结构自定义字段处理),可以实现
IScaffolder接口,写自定义的脚手架逻辑,需要引用Microsoft.AspNet.Scaffolding.CoreNuGet包,编译后把dll放到VS的扩展目录 - 可以安装VS扩展「Scaffolding Explorer」,更直观地管理和编辑脚手架模板
内容的提问来源于stack exchange,提问作者ali movahedi
相关产品推荐
相关产品推荐

