自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]
介紹
我很早之前一直在做mvc5 scaffolder的開發(fā)功能做的已經(jīng)非常完善,使用代碼對mvc5的項目開發(fā)效率確實能成倍的提高,就算是剛進團隊的新成員也能很快上手,如果你感興趣 可以參考?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 詢問得知只能自定義現(xiàn)有的模板 ,無法添加自定義的輸入?yún)?shù),也無法生成定義其它的項目文件,局限性非常大,沒有mvc5 scaffolder那么方便,當(dāng)然這里也不排除我對 https://github.com/aspnet/Scaffolding 項目的研究還不夠深入.
替代方案
那么要在asp.net core 項目中使用類似代碼生成工具,還有一個方案就是自定義擴展Visual Studio.net Extensions插件來實現(xiàn).目前我做了一個原型(還沒有去完善各個類的模板),具體的功能就是在Abp vnext項目中根據(jù)定義好的實體對象(Acme.BookStore.Domain\Book)快速的在Acme.BookStore.Application 項目中生成dto,appservice這些功能類.國內(nèi)有幾abp社區(qū)做的非常好,52abp,abphelper,有的是收費的,也有免費的但版本已經(jīng)很久沒有更新了.
功能演示
技術(shù)點分享
下面我把在開發(fā)Visual Studio.net Extensions中遇到問題和一些自己通過Google查找獲取的資料分享給有這方面需求的朋友.
Visual Studio.net Extensions插件的運行環(huán)境是.net 和 COM(非托管)混合開發(fā),大部分都是非托管API,調(diào)式非常麻煩,但是github上還是有不少的案例可以參考,我就是用?https://github.com/madskristensen/AddAnyFile 項目基礎(chǔ)上添加了自己的功能
主要需要了解的知識點就是AsyncPackage 這個API,另外需要清楚Solution,Project,ProjectItems的關(guān)系.如何讀取Project下面的Class 文件把Class解析出來,包含ClassName,Property,Methods(Functions),這些信息對后面的代碼生成非常重要,這里是無法使用.net Assembly 通過反射來獲取的.當(dāng)你在遍歷ProjectItems時區(qū)分是文件還是文件夾,是類庫,還是資源文件...都需要通過Kind(一竄GUID)去區(qū)分.(https://docs.microsoft.com/en-us/dotnet/api/envdte.constants?view=visualstudiosdk-2017)
剩下的功能就比較簡單了,開發(fā)彈出的Window實現(xiàn)參數(shù)的設(shè)置,比如獲取實體類生成的類文件..這完全用wpf開發(fā)就可以了
接下來根據(jù)這些Class生成對應(yīng)項目文件就簡單了,提供了一個ProjectHelpers 對Project做了一些封裝,可以通過項目路徑,namesapce,添加/刪除文件等常用方法.
功能演示(https://1drv.ms/v/s!AvQJerObIvHt1AM8CpxAuEwkAs2g)
源代碼(https://github.com/neozhu/abpvnextsmartcodegenerator)
如何感興趣可以相互交流一下.
原文地址:https://www.cnblogs.com/neozhu/p/10416530.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吉特仓储管理系统--开源2018年源码
- 下一篇: EFCore Lazy Loading