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

如何在新版Visual Studio中创建自定义脚手架以简化微服务开发?

自定义实体脚手架方案(适配新版Visual Studio)

一、Visual Studio内置的自定义脚手架能力

新版VS(2019/2022)原生支持扩展脚手架,核心依托ASP.NET Core Scaffolding的自定义模板机制,不用额外装工具就能实现:

  • 在项目根目录创建Templates/Scaffolders文件夹,把接口、服务、控制器的模板文件放进去(用{{ClassName}}这类占位符替换实体类名,固定代码直接保留)。
  • 同目录下创建scaffolding.json,配置脚手架的名称、生成文件规则、关联的EF实体模型类型。
  • 配置完成后重启VS,在右键菜单的「添加→新建项→脚手架」里就能看到自定义选项,选好目标实体即可一键生成三类文件。

二、简化开发的NuGet包

如果不想手动写模板配置,这些包可以帮你快速搭建脚手架:

  • Scaffolding.Core:封装了脚手架扩展的基础API,能自动绑定EF实体的元数据,替换模板里的类名、命名空间等变量,减少重复配置工作。
  • CodeGeneration.Roslyn:基于Roslyn编译引擎,能在编译阶段自动扫描EF实体,批量生成对应的接口、服务和控制器,还能自定义生成逻辑,适合大规模微服务场景。

三、快速上手示例(基于内置脚手架)

  1. 编写模板文件(以服务接口为例):
    创建I{{ClassName}}Service.cs.t4文件:

    using YourApp.Entities;
    using YourApp.BaseServices;
    
    namespace YourApp.Services
    {
        public interface I{{ClassName}}Service : IBaseService<{{ClassName}}>
        {
            // 基类已覆盖所有逻辑,无需额外代码
        }
    }
    

    服务实现和控制器的模板依葫芦画瓢,替换类名占位符即可。

  2. 配置scaffolding.json:

    {
      "$schema": "https://json.schemastore.org/scaffolding",
      "name": "Entity Service/Controller Scaffolder",
      "description": "一键生成实体对应的接口、服务和控制器",
      "templates": [
        {
          "sourceFile": "Templates/Scaffolders/I{{ClassName}}Service.cs.t4",
          "outputFile": "Services/I{{ClassName}}Service.cs"
        },
        {
          "sourceFile": "Templates/Scaffolders/{{ClassName}}Service.cs.t4",
          "outputFile": "Services/{{ClassName}}Service.cs"
        },
        {
          "sourceFile": "Templates/Scaffolders/{{ClassName}}Controller.cs.t4",
          "outputFile": "Controllers/{{ClassName}}Controller.cs"
        }
      ],
      "modelType": "Microsoft.EntityFrameworkCore.Metadata.IEntityType"
    }
    
  3. 重启VS后,右键项目→添加→脚手架,找到你定义的选项,选择要生成的EF实体,确认路径就能自动生成所有文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:12