.NET 9SDK正式发布,但关于一些已经停止升级的老旧项目维护的问题
一些前提:
当你想体验一下.NET 9的魅力时,装上了最新版的VS2022。
还有一个旧项目依赖了低版本.NET SDK且需要用VS2019维护。
这时应该buff已叠满:
体验完最新的.NET 9强大能力后,打开旧项目会发现你变成了大怨种。
项目无法加载,又或者编译失败。
<Project Sdk="Microsoft.NET.Sdk">
项目会指定一个目标框架TargetFrameworks,根据需要也许会指定多个目标框架,像是<TargetFrameworks>net461;netstandard2.0;netcoreapp3.1;</TargetFrameworks>
。
开发工具在加载项目时会根据项目的目标框架,自动去选择可以支持编译输出这些目标框架的SDK(VS2019可能不支持这功能,或许直接使用的当前环境的最新版SDK),此时已经有了一些限制:
-
所使用的开发工具不支持需要的SDK版本,SDK更新也会发布相应的开发工具更新包(VS2019最高支持到了.NET 7),SDK包含的MSBuild版本是是否可以加载项目和编译项目的关键。
.NET Core或.NET 5+版本的SDK是包含MSBuild的,更早的.NET Framework所需的MSBuild一般随着VS一起安装。
下面是各版本MSBuild所支持的目标框架:-
MSBuild 17.x (Visual Studio 2022)
支持的目标框架:
.NET Framework(如 net461、net472 、net481等)
.NET Core(如 netcoreapp3.1、net5.0 等)
.NET Standard(如 netstandard2.0、netstandard2.1 等)
.NET 5+(如 net8.0、net9.0 等) -
MSBuild 16.x (Visual Studio 2019/2022)
支持的目标框架:
.NET Framework(如 net461、net472 等)
.NET Core(如 netcoreapp3.1、net5.0 等)
.NET Standard(如 netstandard2.0、netstandard2.1 等)
.NET 5+(如 net6.0、net7.0 等)
备注:MSBuild 16.x 是 Visual Studio 2019 和 Visual Studio 2022 的默认版本,支持较新的 .NET SDK 和 .NET Framework。 -
MSBuild 15.x (Visual Studio 2017)
支持的目标框架:
.NET Framework(如 net461、net472 等)
.NET Core(如 netcoreapp1.0、netcoreapp2.0、netcoreapp2.1)
.NET Standard(如 netstandard1.3、netstandard2.0 等)
备注:MSBuild 15.x 支持与 .NET Core 2.0 及更早版本的构建,适用于较老版本的 .NET Framework。 -
MSBuild 14.x (Visual Studio 2015)
支持的目标框架:
.NET Framework(如 net461、net452 等)
不支持 .NET Core 和 .NET Standard。
备注:MSBuild 14.x 主要用于 .NET Framework 4.x 的构建,不支持 .NET Core 和更高版本的目标框架。 -
MSBuild 12.x (Visual Studio 2013)
支持的目标框架:
.NET Framework(如 net451)
不支持 .NET Core 和 .NET Standard。
备注:MSBuild 12.x 主要用于 .NET Framework 4.5.x 系列的项目,不支持 .NET Core 或 .NET Standard。
-
-
当前使用的SDK不支持目标框架,.NET Core及.NET 5+除了支持同名的目标框架外也会兼容历史版本,还支持.NET Standard标准库的构建。
遇到这个问题最简单的做法就是使用项目目标框架对应的SDK。
如何限定使用的SDK版本呢:
可以在项目目录或者项目父级目录新建global.json
文件,限定所使用的SDK版本、假设项目需使用8.0,则配置需指定大版本8.0
及小版本300
。rollForward配置的作用是在指定版本找不到的情况下,如何选择备选版本。minor的策略是先找小版本迭代,如8.0.301
。找不到再找次要版本迭代,如8.1.1
{ "sdk": { "version": "8.0.300", "rollForward":"minor" } }
更多的看文档吧:global.json 概述
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~