.net-core - .NET Core 运行时是否向后兼容以前的版本?

标签 .net-core asp.net-core-2.1 asp.net-core-1.0

如果我安装了最新版本的 .NET Core 运行时(截至目前,这是 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.


    换句话说:
    (同一主要版本中的次要更新向后兼容)
    微软:

    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


    换句话说:
    (最新的 SDK 可以针对以前的运行时)
    微软:

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


    换句话说:
    (一般来说,你应该只需要安装最新的 SDK/runtime)
    微软:

    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


    换句话说:
    (随着时间的推移,您并排安装其他 SDK/运行时,您应该偶尔删除旧版本,以支持最新版本)
    来源:https://docs.microsoft.com/en-us/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.


    换句话说,.NET Core 运行时版本遵循 Semantic Versioning方案:
    [主要].[次要].[补丁]
    在哪里:
  • 重大升级引入重大变化
  • 次要升级是向后兼容以前的次要版本的功能升级
  • 补丁升级通常是对现有功能的错误修复或安全补丁(也向后兼容以前的小版本)

  • 所以,上述问题的答案是基于语义版本控制的:
  • 主要升级不向后兼容以前的主要版本
  • 次要和/或补丁升级在同一版本中向后兼容

  • 根据这种理解,在构建/发布/恢复 .NET Core 应用程序时,它们的目标是主要版本和功能集,如运行时名称中的主要/次要版本号所示。所以, netcoreapp2.2 向后兼容 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 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)
    希望这对其他人有帮助

    关于.net-core - .NET Core 运行时是否向后兼容以前的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410399/

    相关文章:

    c# - 如何从 Microsoft.AspNetCore.All 元包中删除额外的引用

    c# - 自定义属性的命名约定和指南

    asp.net-core - Gitlab 管道总是失败并显示错误消息

    websocket - 在 ASP.NET Core 1.0 中使用 SignalR

    asp.net - ASP.net Core中正确的标记用法是什么? TagHelpers与HTML Helper

    c# - .NET Core 中托管服务的集成测试

    git - Azure Web App (linux) dotnet core 2.2 中默认部署脚本的权限问题

    asp.net-core - 从 ASP.NET Core 2.1 应用程序中删除 "Server" header

    asp.net-core - ASP.NET Core中的项目之间共享配置文件

    c# - 用于发送短信的 Amazon AWS SNS 无法发送短信,返回状态为 "WaitingForActivation"