[料理佳餚] .NET Core 3.0 的部署模式

微軟官網有一篇 .NET Core 應用程式部署的文章在介紹 .NET Core 的部署模式,只是裡面都是文字,再加上有一些新的詞彙,什麼 FDDSCDFDE,看了也懂了,但是實際操作還是有點霧煞煞,我這邊就直接用 Visual Studio 2019 的發佈設定視窗,來說明不同的發佈設定會對發佈結果造成什麼影響?

從發佈選項開始了解

首先,先別管那些新的詞彙,我們直接開一個 .NET Core 的專案,然後在專案上按右鍵,選擇「發佈」。

挑選發佈目標為「資料夾」,然後按「進階」。

我們會從發佈設定的視窗中看到很多設定,我們關注這三個就好:部署模式目標執行階段檔案發佈選項,這三個設定是影響最終發佈結果最重要的設定。

部署模式

部署模式有兩個選項:Framework 依存性獨立式

差異在執行應用程式的目標機器上,需不需要安裝 .NET Core Runtime? 如果選擇「Framework 依存性」就需要安裝,選擇「獨立式」就不必。

目標執行階段

目標執行階段是選擇要發佈的平台,選項會隨著部署模式的設定而會有一點點的差異,只有選了「Framework 依存性」才能選「可攜式」,可攜式就是說我們發佈出來的應用程式,可以直接在不同的平台上執行。

檔案發佈選項

檔案發佈選項會隨著部署模式及目標執行階段的設定而有所不同,最多會有四個項目。

  • 移除目的地上的其他檔案:很白話,我就不贅述了。
  • 產生單一檔案:將我們的應用程式封裝成一個可執行檔
  • 啟用 ReadyToRun 編譯:是一種 AOT(Ahead-of-Time)編譯方式,可以加快應用程式的載入速度。
  • 修剪未使用的組件:移除未使用的程式庫,減少發佈的檔案大小。
在 Linux 要執行產生的單一檔案,需要賦予使用者帳號「可執行」該檔案的權限,若位處於與該檔案相同目錄下,記得加 ./

該如何選擇?

了解了這三個發佈設定之後,我們就可以針對我們自身的部署環境,選擇不同的發佈設定,如果我們的儲存空間很大、網路傳輸速度也很快,或者是要部署到客戶終端的應用程式,那麼我們可以考慮優先使用「獨立式」的部署方式,以範本專案發佈一個版本出來的檔案大小是 80 ~ 100MB 左右,缺點就是需要指定「目標執行階段」。

相反的,如果儲存空間受限或網路傳輸速度受限,而且是要部署到伺服器端的應用程式,就優先選擇「Framework 依存性」的部署方式,以範本專案發佈一個版本出來的檔案大小在 1MB 以下。

我個人是建議先不要考慮「獨立式」+「修剪未使用的組件」的部署方式,原因是即使移除掉未使用的組件,檔案大小還是比「Framework 依存性」的部署方式大很多,還有就是如果我們寫的程式或第三方元件有使用到 Reflection 或是動態載入連結檔的話,程式有可能會出錯,得到效益對比所承受的風險沒有大很多。

最後如果環境允許的話,可以考慮將應用程式以「單一檔案」的方式產出,第一是檔案數量少很多,第二就是需要手動升降版本的時候方便許多。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學