配置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