介绍

我很早之前一直在做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)

public IEnumerable<ProjectItem> GetProjects(EnvDTE.ProjectItems projectItems) {

            foreach (EnvDTE.ProjectItem item in projectItems)
{
yield return item; if (item.SubProject != null)
{
foreach (EnvDTE.ProjectItem childItem in GetProjectItems(item.SubProject.ProjectItems))
if (childItem.Kind == EnvDTE.Constants.vsProjectItemKindSolutionItems)
yield return childItem;
}
else
{
foreach (EnvDTE.ProjectItem childItem in GetProjectItems(item.ProjectItems))
if (childItem.Kind == EnvDTE.Constants.vsProjectItemKindSolutionItems)
yield return childItem;
}
}
}

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

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

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

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

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

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

  1. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  2. openlayers4 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  3. 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)

    源码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描述了流媒体服务器对源端音 ...

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

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

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

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

  6. asp.net开发中常见公共捕获异常方式总结(附源码)

    本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...

  7. 用GO语言开发editplus编辑器插件(附源码)

    我要开发的插件功能极为简单,就是对用户选中的内容进行base64编码或解密工作. 其中所涉及的技术部分主要是GO语言程序开发和editplus插件配置的部分,首先我们来看一下GO语言代码的写法,如下: ...

  8. openlayers4 入门开发系列之聚合图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers4 入门开发系列之迁徙图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

随机推荐

  1. Linux下可以ping ip地址但无法ping域名解决方法

    分析:当前系统无法解决域名至ip地址故障. 步骤阅读 2 三:解决过程: 1.分析dns故障: 2.物理机可以ping 地址,但无法ping域名: 3.检查/etc/resolv.conf: 注: ( ...

  2. POI读取excel文件。

    1) poi读取现成.xls文件,不需要自己建立.xls ====ReadExcel​类​==== package cust.com.excelToDataTest; import java.io.F ...

  3. MySql-两阶段加锁协议

    此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性. 2PC,两阶段提交协 ...

  4. Lucene 源码分析之倒排索引(三)

    上文找到了 collect(-) 方法,其形参就是匹配的文档 Id,根据代码上下文,其中 doc 是由 iterator.nextDoc() 获得的,那 DefaultBulkScorer.itera ...

  5. 大白话5分钟带你走进人工智能-第四节最大似然推导mse损失函数(深度解析最小二乘来源)(2)

    第四节  最大似然推导mse损失函数(深度解析最小二乘来源)(2) 上一节我们说了极大似然的思想以及似然函数的意义,了解了要使模型最好的参数值就要使似然函数最大,同时损失函数(最小二乘)最小,留下了一 ...

  6. 【转】mip-semi-fixed 走走又停停

    写在前面 MIP 中悬浮元素的特殊情况 其实组件上线已经有一段时间了,最开始看到这个需求是站长提交了一个这中功能的组件过来,不过看过代码立刻就想到了 MIP 页面的特殊性:从结果页打开的 MIP 页面 ...

  7. ABP入门系列目录——学习Abp框架之实操演练

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WE ...

  8. vue.js - 奇怪的 event 对象

    好久都没有写点东西了, 前段时间工作搞得头大,真的就是一起加班到死了.废话不多说,写这篇文章是因为这次因为 event 对象闹了一个乌龙,以此总结一下. 一.event 对象 (一)事件的 event ...

  9. Scala 开发遇到的坑

    1.  x.purchaseIntax.getOrElse(BigDecimal(0.00)) 可以直接写成 x.purchaseIntax.getOrElse(0)自动转换的 2. srcDataL ...

  10. 系统的讲解 - PHP 浮点数高精度运算

    目录 概述 浮点数运算的"锅" 任意精度数学函数 常用数值处理方案 扩展 小结 概述 记录下,工作中遇到的坑 ... 关于 PHP 浮点数运算,特别是金融行业.电子商务订单管理.数 ...