Dot-Net-Core

.NET Core Runtime 是否向後兼容以前的版本?

  • March 29, 2019

如果我安裝了最新版本的 .NET Core Runtime(截至目前,它是 2.2.3 版):

<https://dotnet.microsoft.com/download/dotnet-core/2.2>

那個安裝是否與以前版本的 .NET Core 向後兼容?

例如,上述安裝是否與針對以下目標的應用程序兼容:

  • netcoreapp1.0
  • netcoreapp2.0
  • netcoreapp2.1
  • netcoreapp2.2

我意識到.NET 執行時可以並排安裝。但是,這並不能回答我的問題。一個 2.2 安裝是否與以前的版本向後兼容,從而不需要額外的執行時?

編輯 .NET Core 3.x SDK 已發布。與 v2.2 及其之前的版本不同,此版本不支持針對以前的執行時(即 netcoreapp2.2、netcoreapp2.1 等)的能力

tldr;

是的。通過安裝 .NET Core Runtime 2.2.3,您可以執行面向 netcoreapp2.0、netcoreapp2.1 和 netcoreapp2.2 的應用,而無需安裝額外的執行時。

解釋

微軟:

…NET Core 執行時更新在主要版本“帶”內兼容,例如 1.x 和 2.x。

換句話說:(同一主要版本中的次要更新是向後兼容的)

微軟:

此外,較新版本的 .NET Core SDK 通常能夠以兼容的方式建構以先前版本的執行時為目標的應用程序

換句話說:(最新的 SDK 可以針對以前的執行時)

微軟:

通常,您只需要應用程序所需的最新 SDK 和最新更新檔版本的執行時。

換句話說:(一般來說,你應該只需要安裝最新的SDK/runtime)

微軟:

隨著時間的推移,當您安裝 .NET Core 執行時和 SDK 的更新版本時,您可能希望從您的電腦中刪除過時版本的 .NET Core。刪除舊版本的執行時可能會更改選擇執行共享框架應用程序的執行時

換句話說:(隨著時間的推移並排安裝額外的 SDK/執行時,您應該偶爾刪除舊版本,以支持最新版本)

來源:https ://docs.microsoft.com/en-us/dotnet/core/versions/remove-runtime-sdk-versions?tabs=windows

.NET Core 版本控制

根據文件:

“.NET Core 2.1”是指 .NET Core 執行時版本號。.NET Core 執行時具有遵循語義版本控制的主要/次要/更新檔版本控制方法。

換句話說,.NET Core 執行時版本遵循語義版本控制方案:

[主要].[次要].[更新檔]

在哪裡:

  • 重大升級引入了重大變化
  • 次要升級是與以前的次要版本向後兼容的功能升級
  • 更新檔升級通常是對現有功能的錯誤修復或安全更新檔(也向後兼容以前的次要版本)

因此,上述問題的答案基於語義版本控制:

  • 主要升級不向後兼容以前的主要版本
  • 次要和/或更新檔升級在同一版本內向後兼容

有了這種理解,當 .NET Core 應用程序被建構/發布/恢復時,它們以主要版本和功能集為目標,如執行時名稱中的主要/次要版本號所示。因此,netcoreapp2.2向後兼容netcoreapp2.1,而後者又向後兼容netcoreapp2.0。但都與netcoreapp1.xnetcoreapp3.x不兼容。

安裝一個 .NET Core 2.1.5 執行時,並假設依賴於框架的發布部署,您將能夠執行面向以下目標的應用程序:

  • netcoreapp2.0
  • netcoreapp2.1

但不是:

  • netcoreapp1.0(不兼容)
  • netcoreapp2.2(尚不支持)

如果安裝了多個執行時,則根據安裝了最高更新檔的最新執行時選擇確切的執行時。

關於 SDK

SDK 不基於語義版本控制。但是,每個 SDK 都以最大 .NET Core 執行時為目標,並支持之前的每個版本。

這意味著,如果您想針對多個執行時進行建構(即使您可以),您不需要在建構伺服器上安裝多個SDK 。SDK 已經包含了在目前版本(或任何先前版本)上開箱即用地建構應用程序所需的所有執行時。例如,如果您安裝 .NET Core 2.2.105 SDK,則可以為 netcoreapp1.0、netcoreapp2.0、netcoreapp2.1 或 netcoreapp2.2 建構。但是您不能為 .NET Core 2.3 或 3.0 建構。

一個例子

假設我有一個建構伺服器,它安裝了最新的 .NET Core SDK ( SDK 2.2.105 - 2.2.3 Runtime )。

雖然安裝了 SDK 2.2.105,但我可能想要建構和發布一個 .NET Core 2.1 應用程序:

dotnet publish 
    /p:Configuration=Release -r win-x64 --self-contained false
    /p:IsWebConfigTransformDisabled=true --framework netcoreapp2.1
    /p:DebugSymbols=false /p:DebugType=None
  • /p:Configuration=Release- 配置發布
  • -r win-x64- 目標 Windows 部署(而不是攜帶式)。有關完整列表,請參閱此<https://docs.microsoft.com/en-us/dotnet/core/rid-catalog>。
  • --self-contained false- 依賴於框架的部署(需要在主機上安裝執行時)
  • /p:IsWebConfigTransformDisabled=true- 不要轉換 web.config 以避免 Visual Studio 生成的預設 web.config 出錯(從 2.1 遷移到 2.2 時可能需要)
  • --framework netcoreapp2.1- 明確地針對執行時框架
  • /p:DebugSymbols=false /p:DebugType=None- 禁用 .PDB 文件

此版本可以安裝在具有最新執行時.NET Core Runtime + Hosting Bundle 2.2.3的生產伺服器上- 不需要其他執行時(或 SDK)

希望這對其他人有幫助

引用自:https://stackoverflow.com/questions/55410399