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