1. 程式人生 > >ASP.NET Core 2.2 基礎知識(十八) 託管和部署 概述

ASP.NET Core 2.2 基礎知識(十八) 託管和部署 概述

為了方便演示,以 .NET Core 控制檯應用程式講解.

我們新建一個控制檯應用程式,安裝 "Newtonsoft.Json" Nuget 包,然後右鍵點選該專案,選擇"釋出":

 

我們依次選擇"檔案",設定好路徑,最後點選建立配置檔案,介面變成了下面這樣:

 

然後我們點選"配置"

 

那麼,問題來了."部署模式" 裡面有兩個選項:

1.當選擇框架依賴時,"目標執行時"有:"可移植","win-x86","win-x64","osx-64","linux-x64" 5個選項.

2.當選擇"獨立"時,"目標執行時"沒有"可移植"這個選項.

我們到底應該怎麼選擇?

不要做思想的巨人,行動的矮子!

沒事兒走兩步!

依賴框架的部署 (FDD) : "框架依賴" + "可移植"

以這種方法釋出後,進入釋出的資料夾發現,居然只有5個檔案 !

 

1個應用程式的程式集,1個pdb,2個json,1個第三方依賴項.

咦?怎麼沒有.EXE 檔案?沒有 .exe 檔案,我怎麼執行該專案?(其實,進入到該專案的debug資料夾,你會發現也沒有.exe檔案)

這樣執行:(為了方便,我通過 VS Code 進入該資料夾)

現在,我們回過頭來看官方對這種方式的解釋:

依賴框架的部署 (FDD) : 

顧名思義,依賴目標系統上存在的共享系統級版本的 .NET Core.由於已存在 .NET Core,因此應用在 .NET Core 安裝程式間也是可移植的.應用僅包含其自己的程式碼和任何位於 .NET Core 庫外的第三方依賴項.FDD 包含可通過在命令列中使用 dotnet 實用程式啟動的 .dll 檔案。 例如,dotnet app.dll 就可以執行一個名為 app 的應用程式.

結合我們的實際操作,大概就是這幾個意思:

1.FDD 只會部署應用程式和第三方依賴項,也就是釋出生成的這4個檔案: MyConsole.dll ,MyConsole.pdb , 應用程式配置檔案 MyConsole.deps.json,以及第三方依賴項 Newtonsoft.json.dll .

2.名字既然叫"依賴框架",那依賴的系統肯定必須要有框架才行!也就是說,應用程式將要部署到的目標系統上,必須要有 .NET Core ;

3.應用程式將使用目標系統上存在的 .NET Core 版本.這就是最後一個檔案的意義.我們用記事本開啟 MyConsole.runtimeconfig.json ,可以看出,該檔案指明瞭我們需要依賴的.Net Core 的版本: "2.2.0"

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.2",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.2.0"
    }
  }
}

FDD 也是 .NET Core 和 ASP.NET Core 應用程式的預設部署模型.該部署方式的優缺點如下:

優點:

  • 不需要提前定義 .NET Core 應用將在其上執行的目標作業系統。 因為無論什麼作業系統,.NET Core 的可執行檔案和庫都是用通用的 PE 檔案格式,因此,無論什麼基礎作業系統,.NET Core 都可執行應用。 

  • 部署包很小。 只需部署應用及其依賴項,而無需部署 .NET Core 本身。

  • 除非重寫,否則 FDD 將使用目標系統上安裝的最新服務執行時。 這允許應用程式使用 .NET Core 執行時的最新修補版本。

  • 許多應用都可使用相同的 .NET Core 安裝,從而降低了主機系統上磁碟空間和記憶體使用量。

缺點:

  • 只有目標系統上安裝的 .NET Core 版本不低於應用程式要求的版本時,應用才能執行。

  • 如果不瞭解將來版本,.NET Core 執行時和庫可能發生更改。 在極少數情況下,這可能會更改應用的行為。

官方的這個優缺點已經說得很詳細了.其中,我對標紅的這句缺點實驗了一下,結果分享給大家:

首先,我們將 MyConsole.runtimeconfig.json 檔案中的版本號修改成 "2.3.0":

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.2",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.3.0" 
    }
  }
}

接著,我們在命令列中輸入 dotnet myconsole.dll 執行該專案:

執行失敗!

錯誤資訊大概意思如下:

第1句:沒有找到任何可以相容的 framework 版本.

第2句:沒有找到指定的 2.3.0 版本的 framework "Microsoft .NETCore.App" .

最後一句:(該系統)只安裝了 2.2.0 版本.

現在 ,我們將版本號修改成 2.1.0 試試看:

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.2",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.1.0"
    }
  }
}

正常運行了:

 

又 12點 了.睡了.明天繼續