自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]
介绍
我很早之前一直在做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框架代码生成插件[附源码]相关推荐
- java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)
java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...
- Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程
Python开发实战案例之网络爬虫(附源码)-35人已学习 课程介绍 课程特色: 特色1:案例驱动-围绕两大完整的Python网络爬虫实战开发案例:IT电子书下载网络爬虫和股票交易数据 ...
- 三、自定义Abp Vnext框架代码生成模板
我们知道通过abp cli命令可以快速的搭建一个最基本的abp项目环境,但我们项目中一般都需要使用自己的UI.数据库和基础配置,如果每次都用官方默认模板创建项目,那就需要每次都重复前两章的过程来搭建基 ...
- 在Win 11下使用Visual Studio 2019和cygwin编译JBR(Java SDK 17)源码
很多文章介绍了JDK 8和JDK11源码在Linux编译,很少有人介绍了JDK 17在windows的编译过程,所以写了这篇文章,为什么选用JBR 17版本,因为JBR17 版本集成了HotSwapA ...
- 流行的Spring Boot + Vue架构整合开发的网易云+QQ音乐(附源码)
前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件.调用更多系统资源,再加上 Web 开 ...
- Android开发之自定义控件的基本介绍(附源码)
老套路先看效果图: 一个特别简单的字母排序列表如上图: 先看下有哪些属性: <com.xiayiye.honorfirst.custom.CustomNumViewandroid:id=&quo ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...
- springboot自定义ClassLoader实现同一个jar支持多版本的使用场景【附源码】
springboot自定义ClassLoader实现同一个jar支持多版本的使用场景 背景 最近业务提出一个业务场景:系统目前支持hive3.1.0版本的数据源适配,但是有个别部门使用的数据源是hiv ...
- cesium 入门开发系列矢量瓦片加载展示(附源码下载)
前言 cesium 入门开发系列环境知识点了解: cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等 cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 ...
最新文章
- java基础(十三)-----详解内部类——Java高级开发必须懂的
- Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
- yolov4论文_YOLOv4论文详细解读
- 笑话(12) 内裤都磨破了
- Sharding-Proxy分库配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记020
- python importlib
- 转载:ReferenceEquals, == , Equals 区别
- 局域网连接MYSQL8.0报错1251的解决记录
- js 栈 html标签修复,js 打印错误堆栈
- 海康VisionMaster定位任务
- 2018.12.4 王二的经济学故事 DYNASTIES
- 调用百度API实现人脸识别
- android carlife 源码,CarLife开发总结
- jquery解绑、绑定笔记
- 天干地支与阴阳五行的关系
- c 语言 图片大小,ABCDEFG罩杯有多大啊,最好能用数字和语言或者图片来形容下,? 爱问知识人...
- 眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列
- Java 获取Word批注所标记的文本和图片
- stm32cube,hal库来实现PS2手柄数据发送
- 区块与共识(一):解决竞选记账权的问题