.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 概述

posted @   zhuzhijie  阅读(151)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示