.net core .NET核心运行时是否与以前的版本向后兼容?

.net core .NET核心运行时是否与以前的版本向后兼容?,.net-core,asp.net-core-2.1,asp.net-core-1.0,.net Core,Asp.net Core 2.1,Asp.net Core 1.0,如果我安装了.NET核心运行时的最新版本(截至目前,为2.2.3版): 该安装是否与以前版本的.NET Core向后兼容 例如,上述安装是否与针对以下目标的应用程序兼容: netcoreapp1.0 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 我意识到.NET运行时可以并排安装。然而,这并不能回答我的问题。one 2.2安装是否与以前的版本向后兼容,因此不需要额外的运行时 编辑 .NET Core 3.x SDK已经发布。与v2.2和之前的版本不同,

如果我安装了.NET核心运行时的最新版本(截至目前,为2.2.3版):

该安装是否与以前版本的.NET Core向后兼容

例如,上述安装是否与针对以下目标的应用程序兼容:

  • netcoreapp1.0
  • netcoreapp2.0
  • netcoreapp2.1
  • netcoreapp2.2
我意识到.NET运行时可以并排安装。然而,这并不能回答我的问题。one 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核心运行时更新在主版本中兼容 “波段”如1.x和2.x

换言之: (同一主要版本中的次要更新向后兼容)

微软:

此外,.NET核心SDK的较新版本通常保持 能够构建针对早期版本的应用程序 以兼容的方式运行

换言之: (最新的SDK可以针对以前的运行时)

微软:


通常,您只需要的最新SDK和最新补丁版本 应用程序所需的运行时

换言之: (一般来说,您只需要安装最新的SDK/运行时)

微软:

随着时间的推移,当您安装.NET核心运行时的更新版本时 和SDK,您可能希望从中删除过时的.NET Core版本 你的机器。删除较旧版本的运行时可能会更改 选择运行时来运行共享框架应用程序

换言之: (随着时间的推移,当您同时安装其他SDK/运行时,您应该偶尔删除旧版本,以支持最新版本)

资料来源:

.NET核心版本控制 根据文件:

“.NET Core 2.1”指的是.NET Core运行时版本号。这个 .NET核心运行时有一种主要/次要/修补程序的版本控制方法 遵循语义版本控制

换句话说,.NET Core运行时版本遵循以下方案:

[Major].[Minor].[Patch]

其中:

  • 重大升级带来了突破性的变化
  • 次要升级是与以前次要版本向后兼容的功能升级
  • 补丁升级通常是对现有功能的bug修复或安全补丁(也与以前的次要版本向后兼容)
因此,以上问题的答案基于语义版本控制:

  • 主要升级与以前的主要版本不向后兼容
  • 次要和/或补丁升级在同一版本中向后兼容
基于这种理解,当生成/发布/恢复.NET核心应用程序时,它们以运行时名称中的主要/次要版本号所指示的主要版本和功能集为目标。因此,netcoreapp2.2netcoreapp2.1向后兼容,后者反过来又与netcoreapp2.0向后兼容。但是它们都与netcoreapp1.xnetcoreapp3.x不兼容

只需安装一次.NET Core 2.1.5运行时,并假设发布部署依赖于框架,您就可以运行针对以下目标的应用程序:

  • netcoreapp2.0
  • netcoreapp2.1
但不是:

  • netcoreapp1.0(不兼容)
  • netcoreapp2.2(尚不支持)
如果安装了多个运行时,则根据使用最高修补程序安装的最新运行时选择确切的运行时

关于SDK SDK不基于语义版本控制。但是,每个SDK都以最大.NET核心运行时为目标,并支持之前的每个版本

这意味着,如果您想针对多个运行时进行构建,您不需要在构建服务器上安装多个运行时(即使您可以)。SDK已经包含了在当前版本(或任何早期版本)上构建应用程序所需的所有现成运行时。例如,如果安装.NET Core 2.2.105 SDK,则可以为netcoreapp1.0、netcoreapp2.0、netcoreapp2.1或netcoreapp2.2构建。但您不能为.NETCore2.3或3.0构建

示例

假设我有一个构建服务器,它安装了最新的.NET核心SDK ()

虽然已安装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部署(而不是便携式)。有关完整列表,请参阅此
  • --自包含的false
    -依赖于框架的部署(需要在主机上安装运行时)
  • /p:iswebconfig传输mdisabled=true
    -不要转换web.config以避免Visual Studio生成的默认web.config出错(从2.1迁移到2.2时可能需要)
  • ——框架netcoreapp2.1
    ——明确地以运行时框架为目标
  • /p:DebugSymbols=false/p:DebugType=None
    -禁用.PDB文件
此版本可以安装在具有最新运行时的生产服务器上-不需要其他运行时(或SDK)


希望这有助于其他人

如果您的目标是2.0,那么一些使用示例将演示此行为:

  • 指定了2.0。2.0.5