關於 Visual Studio 支援 IWizard 的範本套件開發

關於支援 IWizard 的範本套件開發

Visual Studio 擴充功能開發歷史

關於 Visual Studio 範本

以下提及的 Project Templates = 範本

小弟蠻多文章、線上課程、或者在社團分享許多關於 Visual Studio 範本開發的相關資源,也成立裡書社團【台灣 Visual Studio Extensions 套件開發俱樂部】。

事實上、Visual Studio 如果是單純的 範本開發 也就是 C# Project Templates 最簡單的方式就是(匯入/匯出)範本,但是這完全沒什麼彈性 與 擴充性可言,更不用說你想做出像互動式精靈甚至 Generate Code產生專案程式碼骨架等等,這就不是單存範本能夠做到,這就得透過 VS IDE/envdte/IWizardTemplates 才能夠做到,也就是得使用一些 Visual Studio IDE 的一部分功能才能夠做到。

為 Project Templates 加入 Code Generate 的功能

整潔架構 CQRS 精靈範本

在我最早期的 MyORM 裡即提供一種動態入 Entities/DbContext 的功能、甚至我能 Generate 自己框架的 Source Code 進來。

IWizard

很多人都知道 IWizard,這裡就不多談,它只是進入互動 Project Templates 的一張門票而已,它讓你的 Templates 跟 IDE 建立互動的機制 + 取用 IDE 的功能,它的功能也不只如此,不過若您不清楚如何建立支援 IWizard 的 Project Templates 可以參考我的線上課程:團隊開發系列-設計符合團隊的範本精靈 (Project Template) 課程連結:https://hiskio.com/courses/192/about?hi=MNJ7EJRV3Z4L&s=tc

.NET 6 中的範本開發

由於 .csproj 專案格式的改變間接影響到 Project Templates 的開發,怎麼說呢?因為 Project Templates 為 Visual Studio 擴充性的一部份,這其實從 VS2010 開始,Logo 圖其實就有說明這一點了。

安裝了 Visual Studio 擴充功能後,你可以找到『延伸模組』

且會有【VSIX Project】、【C# Project Templates】等專案類型、而由於所謂的範本開發其實是用 Project 來開發 Projct 的概念,也就是說 Project Templates 自己也有『專案描述檔』 + Target Framework,且開發時,我可以將 cs 設為[內容]不編譯,因為我是在開發範本,等於設計階段,不是要這時候編譯。所以開發時、觀念要稍微轉一下。

以及剛提到範本本身也是透過 MSBuild + target Framework + Roslyn Compile 編譯出來的,目前並未有支援 .NET Core 新版專案格式的 C# Project Templates,官方並未對此繼續發展,我猜是 VS 即便到 2022 也是 windows Only 所以發展為跨平台並沒有意義,再者,他只是協助編譯出擴充功能的 Assembly,注意,所有擴充功能全都仰賴 VSIX 來進行散佈,這包括 Project Templates,每一個包含 VsPackage/IWizard 的 VSIX 都會輸出一個 DLL/Assembly,也就是這個 DLL 目前還是 .NET Framework Only 喔!

x64 與 x86 的問題

接續前面的 .NET Core 議題,由於從 VS2022 開始,支援 x64 架構,也就是整個 IDE 都以 x64 來啟動,這意味原先以 VS2019 編譯出來的套件均無法執行在 VS2022 喔,因為 (Process Model 不同/CPU) 架構不同,所以在 VS2022 裡新增了一個屬性『Product Architecture』。

也就是說,如果你想讓你的 (範本/套件) 支援 VS2022 這個 x64 版本你最少要使用 VS2022 來編譯,並加上 amd64 這個 Tag,如果你想同時支援舊版 VS2019 以前的版本你得重複增加 x86 的 Product Architecture。

若未加上此 Tag 你將無法安裝或向下相容將套件安裝在 VS2019 以前的舊版本。




後記: 

下次再分享關於精靈開發的進階內容,並聊聊我怎麼將 CleanArchitectureCQRSTemplate 開發出來的。

關於 C# Project Templates 開發可參考我的線上課程:

課程:團隊開發系列-設計符合團隊的範本精靈 (Project Template)

https://hiskio.com/courses/192/about?hi=MNJ7EJRV3Z4L&s=tc

留言

這個網誌中的熱門文章

什麼是 gRPC ?

什麼是 gRPC(二)- 來撰寫第一個 Hello World 吧!

常見的程式碼壞味道(Code Smell or Bad Smell)