.NET Core Runtime向后兼容以前的版本吗?

Is .NET Core Runtime backwards compatible with previous releases?

如果我已经安装了.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 runtime updates are compatible within a major version
'band' such as 1.x and 2.x.

Ok.

换一种说法:
(同一主要版本中的次要更新是向后兼容的)

好的。

微软:

好的。

Additionally, newer releases of the .NET Core SDK generally maintain
the ability to build applications that target previous versions of the
runtime in a compatible manner

Ok.

换一种说法:
(最新的SDK可以定位以前的运行时)

好的。

微软:

好的。

In general, you only need the latest SDK and latest patch version of
the runtimes required for your application.

Ok.

换一种说法:
(通常来说,您只需要安装最新的SDK /运行时)

好的。

微软:

好的。

Over time, as you install updated versions of the .NET Core runtime
and SDK, you may want to remove outdated versions of .NET Core from
your machine. Removing older versions of the runtime may change the
runtime chosen to run shared framework applications

Ok.

换一种说法:
(随着时间的流逝并排安装其他SDK /运行时,您应该偶尔删除较旧的版本,而采用最新版本)

好的。

来源:https://docs.microsoft.com/zh-cn/dotnet/core/versions/remove-runtime-sdk-versions?tabs=windows

好的。

.NET Core版本控制

根据文档:

好的。

".NET Core 2.1" refers to the .NET Core Runtime version number. The
.NET Core Runtime has a major/minor/patch approach to versioning that
follows semantic versioning.

Ok.

换句话说,.NET Core运行时版本遵循语义版本控制方案:

好的。

[主要]。[次要]。[补丁]

好的。

哪里:

好的。

  • 重大升级带来了重大变化
  • 次要升级是与以前的次要版本向后兼容的功能升级
  • 补丁程序升级通常是对现有功能的错误修复或安全补丁程序(也与以前的次要版本向后兼容)
  • 好的。

    因此,以上问题的答案基于语义版本控制:

    好的。

  • 主要升级与以前的主要版本不向后兼容
  • 小版本和/或补丁程序升级在同一版本中向后兼容
  • 好的。

    基于这种理解,构建/发布/还原.NET Core应用程序时,它们将针对主要发行版和功能集,如运行时名称中的主要/次要版本号所示。因此,netcoreapp2.2与netcoreapp2.1向后兼容,而netcoreapp2.1与netcoreapp2.0向后兼容。但是所有都与netcoreapp1.x或netcoreapp3.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运行时)。

    好的。

    虽然已安装SDK 2.2.105,但我可能想构建和发布.NET Core 2.1应用程序:

    好的。

    1
    2
    3
    4
    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/zh-cn/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运行时+主机捆绑包2.2.3的生产服务器上-不需要其他运行时(或SDK)

    好的。

    希望这对别人有帮助

    好的。

    好。


    如果以2.0为目标,则一些用法示例演示了该行为:

  • 指定了2.0。 2.0.5是安装的最高修补程序版本。 使用2.0.5。
  • 指定了2.0。 没有安装2.0。*版本。 1.1.1是安装的最高运行时。 显示错误信息。
  • 指定了2.0。 没有安装2.0。*版本。 2.2.2是已安装的最高2.x运行时版本。 2.2.2被使用。
  • 指定了2.0。 没有安装2.x版本。 3.0.0已安装。 显示错误信息。
  • 请参考以下Microsoft文档中的链接
    微软链接