
前言
在.NET 4.0的版本我利用上傳壓縮檔到網站的方式,來達到網站功能的新增、更新或移除,壓縮檔上傳後即會解開內容佈署至對應的目錄中,由於網站是依賴著IIS在執行,所以當網站內的程式有所異動時,將會立即重新啟動,新的功能也就隨即更新上去。
這種功能的佈署方式,一直到現在還是運作得相當不錯,仍有專案是採用這樣的方式來進行更新。每一次更新時只需要專注於要更新的部分,大大的降低更新後的不安心感。
在.NET CORE 剛推出時,了解到可以跨平台執行後,我就持續的在關注何時該進場進行轉換,一直到了Razor Pages的推出,我認為時機成熟了才開始投入時間進行相關技術的研究。
ASP.NET CORE 2.2
一開始我使用了v2.2來開始進行開發,馬上就了解到整個運行的架構與.NET Framework的不同,無法透過檔案複製的方式來增加功能,網站在啟動建構(Construction)時就已經將相關的功能(Application Parts)載入,因此無法簡單透過上傳檔案進行更新。
經過了一連串的研究後,發現在網站啟動(Startup)時可以自行將需要的功能載入,先使用AssemblyLoadContext讀取所需的組件,然後再透過ApplicationPartManager就可以將功能載入。
NuGet Package
一開始的設定是使用壓縮檔(.zip)來包裝套件內容,透過自訂MSBuild Task 來讀取JSON內容並在專案建置完成後進行套件壓縮檔的建立。
後來為了要將一些共用的組件進行整理,架設了Private NuGet Server進行管理,突然發現如果可以將套件的內容發佈到NuGet Server上,一方面開發時可用來進行開發階段的參考,一方面又可以做為功能的發佈,這樣似乎是一個不錯的好點子。

在Package中增加了一個"Platform"目錄,包含了一個manifest.json檔案,用來描述該如何載入這個套件的相關資訊。套件的載入又可分為兩種模式:
- 本地端目錄: 將套件放置於網站ContentRootPath中的Packages目錄
- JSON定義檔: 定義讀取的NuGet Server URI與套件名稱版本
ASP.NET CORE 3.0
很快的3.0 正式推出,由於在Startup的DI機制上做了一些調整,只好又重新改寫了一次,這次將整個Configure的機制調整得更簡單。
[延伸閱讀]
