微軟官網有一篇 .NET Core 應用程式部署的文章在介紹 .NET Core 的部署模式,只是裡面都是文字,再加上有一些新的詞彙,什麼 FDD、SCD、FDE,看了也懂了,但是實際操作還是有點霧煞煞,我這邊就直接用 Visual Studio 2019 的發佈設定視窗,來說明不同的發佈設定會對發佈結果造成什麼影響?
從發佈選項開始了解
首先,先別管那些新的詞彙,我們直接開一個 .NET Core 的專案,然後在專案上按右鍵,選擇「發佈
」。
挑選發佈目標為「資料夾
」,然後按「進階
」。
我們會從發佈設定的視窗中看到很多設定,我們關注這三個就好:部署模式
、目標執行階段
、檔案發佈選項
,這三個設定是影響最終發佈結果最重要的設定。
部署模式
部署模式
有兩個選項:Framework 依存性
及獨立式
。
差異在執行應用程式的目標機器上,需不需要安裝 .NET Core Runtime? 如果選擇「Framework 依存性」就需要安裝,選擇「獨立式」就不必。
目標執行階段
目標執行階段
是選擇要發佈的平台,選項會隨著部署模式的設定而會有一點點的差異,只有選了「Framework 依存性」才能選「可攜式
」,可攜式就是說我們發佈出來的應用程式,可以直接在不同的平台上執行。
檔案發佈選項
檔案發佈選項
會隨著部署模式及目標執行階段的設定而有所不同,最多會有四個項目。
- 移除目的地上的其他檔案:很白話,我就不贅述了。
- 產生單一檔案:將我們的應用程式封裝成一個可執行檔
- 啟用 ReadyToRun 編譯:是一種 AOT(Ahead-of-Time)編譯方式,可以加快應用程式的載入速度。
- 修剪未使用的組件:移除未使用的程式庫,減少發佈的檔案大小。
./
。該如何選擇?
了解了這三個發佈設定之後,我們就可以針對我們自身的部署環境,選擇不同的發佈設定,如果我們的儲存空間很大、網路傳輸速度也很快
,或者是要部署到客戶終端
的應用程式,那麼我們可以考慮優先使用「獨立式」的部署方式,以範本專案發佈一個版本出來的檔案大小是 80 ~ 100MB 左右,缺點就是需要指定「目標執行階段」。
相反的,如果儲存空間受限或網路傳輸速度受限
,而且是要部署到伺服器端
的應用程式,就優先選擇「Framework 依存性」的部署方式,以範本專案發佈一個版本出來的檔案大小在 1MB 以下。
我個人是建議先不要考慮「獨立式」+「修剪未使用的組件」的部署方式,原因是即使移除掉未使用的組件,檔案大小還是比「Framework 依存性」的部署方式大很多,還有就是如果我們寫的程式或第三方元件有使用到 Reflection 或是動態載入連結檔的話,程式有可能會出錯,得到效益對比所承受的風險沒有大很多。
最後如果環境允許的話,可以考慮將應用程式以「單一檔案」的方式產出,第一是檔案數量少很多,第二就是需要手動升降版本的時候方便許多。