用途:把 .NET 8 项目或解决方案迁移到 .NET 9,系统性处理所有破坏性变更。适用于将 TargetFramework 从 net8.0 升级到 net9.0、修复升级 SDK 后的构建错误与新警告、适配 .NET 9 运行时/ASP.NET Core 9/EF Core 9 的行为变更、替换 BinaryFormatter、更新 CI/CD、Dockerfile 与部署脚本。不适用于已针对 net9.0 且构建干净、目标为 net10.0(应使用 migrate-dotnet9-to-dotnet10)、从 .NET 7 或更早版本升级(需先处理前序版本)、从 .NET Framework 迁移,以及直接以 .NET 9 起步的新项目。
输入:项目或解决方案路径(.csproj/.sln/.slnx,必需);构建命令(可选,未提供则自动检测);测试命令(可选,自动检测);项目类型提示(可选,未提供则从 PackageReferences 与 SDK 属性自动检测)。
流程:先评估项目,运行 dotnet --version 确认已安装 .NET 9 SDK(未安装则停止并告知用户);判断所用技术领域并建立干净基线。随后在每个 .csproj 或 Directory.Build.props 中将 <TargetFramework>net8.0</TargetFramework> 改为 <TargetFramework>net9.0</TargetFramework>,多目标项目添加或替换 net9.0,并把 Microsoft.Extensions.、Microsoft.AspNetCore.、Microsoft.EntityFrameworkCore.* 等 Microsoft 包更新到 9.0.x(使用中央包管理则改 Directory.Packages.props),再运行 dotnet restore 与干净构建。之后按需要加载参考文档,逐批修复编译错误与源不兼容变更(如 params span 重载解析、SYSLIB0054–SYSLIB0057、C# 13 InlineArray 与迭代器安全上下文、String.Trim 重载移除、BinaryFormatter 总是抛异常等),每批修复后重新构建直到干净。再处理不引发编译错误的行为变更(如浮点到整数转换改为饱和、EF Core 待定模型变更异常、HttpClientFactory 默认 SocketsHttpHandler 与日志脱敏、环境变量优先于 runtimeconfig.json 等)。随后更新基础设施:Dockerfile 基础镜像升级到 9.0(注意 .NET 9 容器镜像不再安装 zlib,需要时执行 RUN apt-get update && apt-get install -y zlib1g)、CI/CD 版本与 global.json(如 "version": "9.0.100"、"rollForward": "latestFeature")、Visual Studio 需 17.12+、Terminal Logger 可通过 --tl:off 或 MSBUILDTERMINALLOGGER=off 关闭。最后执行 dotnet build --no-incremental 与 dotnet test,容器化则构建并测试镜像,并对 BinaryFormatter、浮点转换、EF Core 迁移、HttpClientFactory 强制转换与日志、开发环境 DI 验证、运行时配置优先级做冒烟测试。
限制:破坏性变更信息以加载的参考文档为准,不应搜索文件系统或抓取网页;若项目使用 BinaryFormatter 应停止并告知用户,这是重大决策。官方资料未提供收费、价格、平台等信息。