.NET 9 中的中断性变更

如果要将应用迁移到 .NET 9,则此处列出的中断性变更可能会影响到你。 变更按技术领域分组,例如 ASP.NET Core 或 Windows 窗体。

本文将每个中断性变更分类为“二进制不兼容”或“源不兼容”,或者作为“行为更改”

  • 二进制文件不兼容 - 当针对新的运行时或组件运行时,现有二进制文件可能会遇到行为上的中断性变更(例如加载或执行失败),如果是这样,则需要重新编译。

  • 源代码不兼容 - 当使用新的 SDK 或组件重新编译,或以新的运行时为目标时,现有源代码可能需要更改源才能成功编译。

  • 行为更改 - 现有代码和二进制文件在运行时的行为可能会有所不同。 如果不需要新的行为,则需要更新和重新编译现有代码。

注意

本文是当前正在进行的工作。 这并不是 .NET 9 中的中断性变更的完整列表。 若要查询仍处于待发布状态的中断性变更,请查看 .NET 问题

ASP.NET Core

标题 更改类型 引入的版本
DefaultKeyResolution.ShouldGenerateNewKey 已更改含义 行为变更 预览版 3
开发证书导出不再创建文件夹 行为变更 RC 1
开发环境中的 HostBuilder enables ValidateOnBuild/ValidateScopes 行为变更 预览版 7
未导出到全局命名空间的旧版 Mono 和 Emscripten API 源不兼容 GA
具有多个构造函数的中间件类型 行为变更 RC 1

容器

标题 更改类型 引入的版本
容器映像不再安装 zlib 行为变更 预览版 7
.NET Monitor 映像简化为仅使用版本标签 行为变更 预览版 5

Core .NET 库

标题 更改类型 引入的版本
使用 CompressionLevel 添加 ZipArchiveEntry 时,会设置 ZIP 中央目录标头常规用途位标志 行为变更 预览版 5
已更改对非开放泛型的 UnsafeAccessor 支持 行为变更 预览版 6
API 已过时并带有自定义诊断 ID 源不兼容 (多个)
影响 StringValues 隐式运算符的歧义重载解析 源不兼容 GA
BigInteger 最大长度 行为变更 预览版 6
BinaryReader.GetString() 在格式错误的序列上返回 "\uFFFD" 行为变更 预览版 7
C# 的重载解析首选 params 范围类型的重载 源不兼容
不允许创建 System.Void 数组类型 行为变更 预览版 1
对于标记为 InlineArrayAttribute 的类型,Equals()GetHashCode() 默认抛出异常 行为变更 预览版 6
EnumConverter 验证注册类型是否为枚举类型 行为变更 预览版 7
FromKeyedServicesAttribute 不再注入非键化参数 行为变更 RC 1
IncrementingPollingCounter 初始回调是异步回调 行为变更 RC 1
强制实施内联数组结构大小限制 行为变更 预览版 1
InMemoryDirectoryInfo 将 rootDir 添加到文件前面 行为变更 预览版 1
接受整数的新 TimeSpan.From*() 重载 源不兼容 预览版 3
某些 OOB 包的新版本 源不兼容 预览版 5
RuntimeHelpers.GetSubArray 返回不同类型 行为变更 预览版 1
String.Trim(params ReadOnlySpan<char>) 重载已删除 源/二进制不兼容 GA
支持空环境变量 行为变更 预览版 6
ZipArchiveEntry 名称和注释遵循 UTF8 标志 行为变更 RC 1

密码

标题 更改类型 引入的版本
SafeEvpPKeyHandle.DuplicateHandle 增加句柄的引用计数 行为变更 预览版 7
某些 X509Certificate2 和 X509Certificate 构造函数已过时 源不兼容 预览版 7
简化了 Windows 私钥生存期 行为变更 预览版 7

部署

标题 更改类型 引入的版本
弃用的桌面 Windows/macOS/Linux MonoVM 运行时包 源不兼容 预览版 7

Interop

标题 更改类型 引入的版本
默认支持 CET 不兼容二进制 预览版 6

JIT 编译器

标题 更改类型 引入的版本
浮点数到整数转换将要饱和 行为变更 预览版 4
删除了一些 SVE API 源不兼容 RC 2

网络

标题 更改类型 引入的版本
API 过时 源不兼容 预览版 6
HttpClient 指标无条件报告 server.port 行为变更 预览版 7
默认情况下,HttpClientFactory 日志记录会编修标头值 行为变更 RC 1
HttpClientFactory 使用 SocketsHttpHandler 作为主要处理程序 行为变更 预览版 6
HttpListenerRequest.UserAgent 可为空 源不兼容 预览版 1
HttpClient EventSource 事件中的 URI 查询修订 行为变更 预览版 7
IHttpClientFactory 日志中的 URI 查询修订 行为变更 预览版 7

SDK 和 MSBuild

标题 更改类型 引入的版本
dotnet restore 审核可传递包 行为变更 预览版 6
dotnet sln add 不允许无效的文件名 行为变更 9.0.2xx
dotnet watch 与旧框架的热重载不兼容 行为变更 RC 1
dotnet workload 命令输出更改 行为变更 预览版 1
不再记录 installer 存储库版本 行为变更 预览版 5
针对 .NET Framework 时使用的新默认 RID 源不兼容 GA
终端记录器为默认值 行为变更 预览版 1
.NET 9 SDK 的版本要求 源不兼容 GA
针对 .NET Standard 1.x 目标发出的警告 源不兼容 预览版 6
针对 .NET 7 目标发出的警告 源不兼容 GA

序列化

标题 更改类型 引入的版本
BinaryFormatter 始终引发 行为变更 预览版 6
可为 Null 的 JsonDocument 属性反序列化为 JsonValueKind.Null 行为变更 预览版 1
System.Text.Json 元数据阅读器现在可取消元数据属性名称的转义 行为变更 GA

Windows 窗体

标题 更改类型 引入的版本
BindingSource.SortDescriptions 不返回 null 行为变更 预览版 1
对为 null 性批注的更改 源不兼容 预览版 1
ComponentDesigner.Initialize 引发 ArgumentNullException 行为变更 预览版 1
DataGridViewRowAccessibleObject.Name 起始行索引 行为变更 预览版 1
IMsoComponent 支持为选择加入 行为变更 预览版 2
新的安全分析器 源不兼容 RC 1
如果 DataGridView 为 null,则无异常 行为变更 预览版 1
PictureBox 引发 HttpClient 异常 行为变更 预览版 6
StatusStrip 使用不同的默认呈现器 行为变更 GA

WPF

标题 更改类型 引入的版本
GetXmlNamespaceMaps 类型更改 行为变更/源不兼容 预览版 3

另请参阅