You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.Core NuGet包,编译后把dll放到VS的扩展目录
  • 可以安装VS扩展「Scaffolding Explorer」,更直观地管理和编辑脚手架模板

内容的提问来源于stack exchange,提问作者ali movahedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:27:32