介绍

我很早之前一直在做mvc5 scaffolder的开发功能做的已经非常完善,使用代码对mvc5的项目开发效率确实能成倍的提高,就算是刚进团队的新成员也能很快上手,如果你感兴趣 可以参考 http://neozhu.github.io/MVC5-Scaffolder/#/  https://github.com/neozhu/MVC5-Scaffolder

但是mvc5 scaffolder 有一个致命的弱点,无法通过升级的方式支持.net core mvc 项目,而asp.net core mvc 的 scaffolder通过 https://github.com/aspnet/Scaffolding 询问得知只能自定义现有的模板 ,无法添加自定义的输入参数,也无法生成定义其它的项目文件,局限性非常大,没有mvc5 scaffolder那么方便,当然这里也不排除我对 https://github.com/aspnet/Scaffolding 项目的研究还不够深入.

替代方案

那么要在asp.net core 项目中使用类似代码生成工具,还有一个方案就是自定义扩展Visual Studio.net Extensions插件来实现.目前我做了一个原型(还没有去完善各个类的模板),具体的功能就是在Abp vnext项目中根据定义好的实体对象(Acme.BookStore.Domain\Book)快速的在Acme.BookStore.Application 项目中生成dto,appservice这些功能类.国内有几abp社区做的非常好,52abp,abphelper,有的是收费的,也有免费的但版本已经很久没有更新了.

功能演示

技术点分享

下面我把在开发Visual Studio.net Extensions中遇到问题和一些自己通过Google查找获取的资料分享给有这方面需求的朋友.

Visual Studio.net Extensions插件的运行环境是.net 和 COM(非托管)混合开发,大部分都是非托管API,调式非常麻烦,但是github上还是有不少的案例可以参考,我就是用 https://github.com/madskristensen/AddAnyFile 项目基础上添加了自己的功能

主要需要了解的知识点就是AsyncPackage 这个API,另外需要清楚Solution,Project,ProjectItems的关系.如何读取Project下面的Class 文件把Class解析出来,包含ClassName,Property,Methods(Functions),这些信息对后面的代码生成非常重要,这里是无法使用.net Assembly 通过反射来获取的.当你在遍历ProjectItems时区分是文件还是文件夹,是类库,还是资源文件...都需要通过Kind(一窜GUID)去区分.(https://docs.microsoft.com/en-us/dotnet/api/envdte.constants?view=visualstudiosdk-2017)

剩下的功能就比较简单了,开发弹出的Window实现参数的设置,比如获取实体类生成的类文件..这完全用wpf开发就可以了

接下来根据这些Class生成对应项目文件就简单了,提供了一个ProjectHelpers 对Project做了一些封装,可以通过项目路径,namesapce,添加/删除文件等常用方法.

功能演示(https://1drv.ms/v/s!AvQJerObIvHt1AM8CpxAuEwkAs2g)

源代码(https://github.com/neozhu/abpvnextsmartcodegenerator)

如何感兴趣可以相互交流一下.

原文地址:https://www.cnblogs.com/neozhu/p/10416530.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]相关推荐

  1. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  2. Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程

    Python开发实战案例之网络爬虫(附源码)-35人已学习 课程介绍         课程特色: 特色1:案例驱动-围绕两大完整的Python网络爬虫实战开发案例:IT电子书下载网络爬虫和股票交易数据 ...

  3. 三、自定义Abp Vnext框架代码生成模板

    我们知道通过abp cli命令可以快速的搭建一个最基本的abp项目环境,但我们项目中一般都需要使用自己的UI.数据库和基础配置,如果每次都用官方默认模板创建项目,那就需要每次都重复前两章的过程来搭建基 ...

  4. 在Win 11下使用Visual Studio 2019和cygwin编译JBR(Java SDK 17)源码

    很多文章介绍了JDK 8和JDK11源码在Linux编译,很少有人介绍了JDK 17在windows的编译过程,所以写了这篇文章,为什么选用JBR 17版本,因为JBR17 版本集成了HotSwapA ...

  5. 流行的Spring Boot + Vue架构整合开发的网易云+QQ音乐(附源码)

    前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件.调用更多系统资源,再加上 Web 开 ...

  6. Android开发之自定义控件的基本介绍(附源码)

    老套路先看效果图: 一个特别简单的字母排序列表如上图: 先看下有哪些属性: <com.xiayiye.honorfirst.custom.CustomNumViewandroid:id=&quo ...

  7. leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

  8. springboot自定义ClassLoader实现同一个jar支持多版本的使用场景【附源码】

    springboot自定义ClassLoader实现同一个jar支持多版本的使用场景 背景 最近业务提出一个业务场景:系统目前支持hive3.1.0版本的数据源适配,但是有个别部门使用的数据源是hiv ...

  9. cesium 入门开发系列矢量瓦片加载展示(附源码下载)

    前言 cesium 入门开发系列环境知识点了解: cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等 cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 ...

最新文章

  1. java基础(十三)-----详解内部类——Java高级开发必须懂的
  2. Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
  3. yolov4论文_YOLOv4论文详细解读
  4. 笑话(12) 内裤都磨破了
  5. Sharding-Proxy分库配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记020
  6. python importlib
  7. 转载:ReferenceEquals, == , Equals 区别
  8. 局域网连接MYSQL8.0报错1251的解决记录
  9. js 栈 html标签修复,js 打印错误堆栈
  10. 海康VisionMaster定位任务
  11. 2018.12.4 王二的经济学故事 DYNASTIES
  12. 调用百度API实现人脸识别
  13. android carlife 源码,CarLife开发总结
  14. jquery解绑、绑定笔记
  15. 天干地支与阴阳五行的关系
  16. c 语言 图片大小,ABCDEFG罩杯有多大啊,最好能用数字和语言或者图片来形容下,? 爱问知识人...
  17. 眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列
  18. Java 获取Word批注所标记的文本和图片
  19. stm32cube,hal库来实现PS2手柄数据发送
  20. 区块与共识(一):解决竞选记账权的问题

热门文章

  1. 学习RUNOOB.COM进度一
  2. vue实现todo功能(一):搭建vue-webpack环境
  3. Lintcode165 Merge Two Sorted Lists solution 题解
  4. 阿里云与中国联通首个公共云平台上线
  5. 用户反馈KB3189866累积更新出现卡在95%进度情况
  6. linux 安装apache http server
  7. 中小企业SaaS型软件BI的发展前景
  8. 字节、编码、字符、字符集 专题
  9. 64位的Linux中运行32位的应用程序
  10. 数据结构 【实验3 链表基本操作】