配置rollForward让.net程序向前兼容,.net6开发的程序可以自动跑在.net8上

我们日常的.net程序,总是需要安装非常特定版本的运行时,甚至有时候小版本也必须匹配

我们通过配置rollForward来向前兼容,如果是普通的release,我们会发现一个[myappname].runtimeconfig.json的文件,没有的话新建一个,我们在runtimeOptions节点下增加,最终大致如下

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "rollForward": "LatestMajor"
  }
}

但是如果我们不想每次都去改,毕竟我们是开发人员,应该直接配置进去,特别是单文件发布,他不认[myappname].runtimeconfig.json配置

这时候可以修改项目文件,在PropertyGroup节点下增加<RollForward>LatestMajor</RollForward>,比如

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <LangVersion>latest</LangVersion>
    <RollForward>LatestMajor</RollForward>
  </PropertyGroup>
</Project>

 

还有一种方式,在项目里加个runtimeconfig.template.json文件,写入

{
  "rollForward": "LatestMajor"
}

 

就能让程序发布后,也让人家跑在最新的运行时上
如果写Major,也可以让机子上没有匹配的运行时时,去找更新的运行时

出了Major还有其他的配置 minor feature patch,就是版本范围不同,我们的版本号是 major.minor.feature.patch

 

除了开发人员的方法,还有用户端的方法

比如使用环境变量:DOTNET_ROLL_FORWARD,值还是LatestMajor或者Major

新建一个bat文件,写入 setx DOTNET_ROLL_FORWARD Major /M ,就可以完成配置了,推荐IT人员把它作为默认配置

还有命令行的方式 dotnet --roll-forward Major myapp.dll

 

参考:

https://learn.microsoft.com/zh-cn/dotnet/core/tools/global-json

https://learn.microsoft.com/zh-cn/dotnet/core/versions/selection

https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet#rollforward

posted @ 2023-04-06 14:27  咖喱gg  阅读(372)  评论(0编辑  收藏  举报