构建一个可以在 net6.0 运行时运行的 net5.0 目标应用程序

Jef*_*eff 6 .net-core .net-5 .net-6.0

我之前认为 net6.0 运行时是向后兼容的,因为 net5.0 应用程序将按原样运行,但这不是我在测试中看到的。我的开发系统使用的是VS2019,所以不支持net6.0 SDK。我尝试手动将 TargetFramework 标记转换为 TargetFrameworks 并添加 net5.0;net6.0,但它无法构建。我想要某种表示 5 或更高版本的 net5.0+ 标签,但我也找不到。

但是,为什么当部署到仅具有 net6.0 运行时的系统时,TargetFramework 设置为 net5.0 不起作用?假设我的应用程序是在 net6.0 存在之前构建的。我不想在 net6.0 发布时必须发布新的软件包。这是否需要客户无限期地安装 net5.0 以继续支持我的应用程序?

我觉得我错过了一些简单的东西,但经过几个小时的阅读后,我并没有更接近弄清楚它。

Jef*_*eff 8

我想我终于明白了这一点。将RollForward添加到 .csproj 似乎是必要的成分:

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RollForward>Major</RollForward>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我之前曾尝试将 RollForward 添加到 app.runtimeconfig.json 文件中,但这似乎没有任何效果。我想知道在我的情况下,我正在做一个依赖于发布的“单个文件”框架的exe,它是否可能根本不查看那些运行时配置文件。不确定,但至少我现在有了解决方案。我在测试机器上只安装了 6.0.2 运行时,它允许 net5.0 构建的二进制文件运行。