歡迎光臨
每天分享高質量文章

自定義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

赞(0)

分享創造快樂