.NET 6 中的中断性变更

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

本文指出每个中断性变更是二进制兼容还是源兼容:

  • 二进制兼容 - 现有二进制文件无需重新编译即可成功加载和执行,并且运行时行为不会更改。
  • 源兼容 - 面向新运行时或使用新 SDK 或组件时,源代码将成功编译,且不会发生更改。

ASP.NET Core

标题 二进制兼容 源兼容
ActionResult<T> 将 StatusCode 设置为 200 ✔️
AddDataAnnotationsValidation 方法已过时 ✔️
从 Microsoft.AspNetCore.App 共享框架中删除了程序集 ✔️
Blazor:RequestImageFileAsync 方法中的参数名称已更改 ✔️
Blazor:已替换 WebEventDescriptor.EventArgsType 属性
Blazor:字节数组互操作 ✔️
Changed MessagePack library in @microsoft/signalr-protocol-msgpack ✔️
ClientCertificate 属性不会对 HttpSys 触发重新协商 ✔️
EndpointName 元数据不自动设置 ✔️
标识:已更改 UI 的默认 Bootstrap 版本
Kestrel:日志消息属性已更改 ✔️
Microsoft.AspNetCore.Http.Features 拆分 ✔️
中间件:HTTPS 重定向中间件会在 HTTPS 端口不明确时引发异常 ✔️
中间件:新 Use 重载 ✔️
RC 1 中的最小 API 重命名
RC 2 中的最小 API 重命名
使用 System.Text.Json 时,MVC 不缓冲 IAsyncEnumerable 类型 ✔️
可以为 Null 的引用类型注释已更改 ✔️
已过时和已删除的 API ✔️
PreserveCompilationContext 不默认配置 ✔️
Razor:编译器不再生成 Views 程序集 ✔️
Razor:日志记录 ID 更改 ✔️
Razor:RazorEngine API 已标记为已过时 ✔️
SignalR:Java 客户端已更新到 RxJava3 ✔️
验证 TryParse 和 BindAsync 方法

容器

标题 二进制兼容 源兼容
容器映像中的默认控制台记录器格式设置 ✔️

有关 .NET 6 中容器的其他重大更改的信息,请参阅 .NET 6 容器发行说明

Core .NET 库

标题 二进制兼容 源兼容
API 已过时并带有非默认诊断 ID ✔️
对可以为 Null 的引用类型注释的更改 ✔️
“调试”方法中的条件字符串计算 ✔️
Windows 上的 Environment.ProcessorCount 行为 ✔️
EventSource 回调行为 ✔️ ✔️
Unix 上的 File.Replace 引发匹配 Windows 的异常 ✔️
FileStream 使用 Unix 上的共享锁来锁定文件 ✔️
FileStream 不再将文件偏移量与操作系统同步
FileStream.Position 在 ReadAsync 或 WriteAsync 完成后更新
过时 API 的新诊断 ID ✔️
新的 System.Linq.Queryable 方法重载 ✔️
已从包中删除较旧的框架版本 ✔️
参数名称已更改 ✔️
数据流派生类型中的参数名称 ✔️
DeflateStream、GZipStream 和 CryptoStream 中的部分和零字节读取 ✔️
在 Windows 只读文件上设置时间戳 ✔️
标准数字格式分析精度 ✔️
接口中的静态抽象成员 ✔️
StringBuilder.Append 重载和计算顺序 ✔️
强名称 API 引发 PlatformNotSupportedException ✔️
仅在 Windows 上支持 System.Drawing.Common
System.Security.SecurityContext 被标记为过时 ✔️
Task.FromResult 可能返回单一实例 ✔️
来自 BackgroundService 的未经处理的异常 ✔️

密码

标题 二进制兼容 源兼容
CreateEncryptor 方法针对不正确的反馈大小引发异常 ✔️

部署

标题 二进制兼容 源兼容
64 位 Windows 上的 x86 主机路径 ✔️ ✔️

Entity Framework Core

EF Core 6 中的中断性变更

Extensions

标题 二进制兼容 源兼容
AddProvider 检查非 null 提供程序 ✔️
FileConfigurationProvider.Load 引发 InvalidDataException ✔️
重复的 XML 元素包括索引 ✔️
解析已释放的 ServiceProvider 引发异常 ✔️

全球化

标题 二进制兼容 源兼容
全球化固定模式下的区域性创建和大小写映射

Interop

标题 二进制兼容 源兼容
接口中的静态抽象成员 ✔️

JIT 编译器

标题 二进制兼容 源兼容
根据 ECMA-335 强制调用参数 ✔️ ✔️

网络

标题 二进制兼容 源兼容
从 SPN 中删除了用于 Kerberos 和协商的端口 ✔️
WebRequest、WebClient 和 ServicePoint 已过时 ✔️

SDK 中 IsInRole 中的声明

标题 二进制兼容 源兼容
dotnet run-p 选项已弃用 ✔️
早期版本不支持模板中的 C# 代码 ✔️ ✔️
隐式包含 EditorConfig 文件 ✔️
生成适用于 macOS 的 apphost ✔️
针对发布输出中的重复文件生成错误 ✔️
从 ProjectReference 协议中删除了 GetTargetFrameworkProperties 和 GetNearestTargetFramework ✔️
Arm64 上模拟 x64 的安装位置 ✔️
MSBuild 不再支持调用 GetType()
无法将 .NET 安装到自定义位置 ✔️ ✔️
OutputType 不会自动设置为 WinExe ✔️
使用 --no-restore 发布 ReadyToRun 需要更改 ✔️
不生成 runtimeconfig.dev.json 文件 ✔️
未指定自包含时出现 RuntimeIdentifier 警告 ✔️
根文件夹中的工具清单 ✔️ ✔️
.NET 6 SDK 的版本要求 ✔️ ✔️
.version 文件包括生成版本 ✔️ ✔️
将引用程序集写入 IntermediateOutputPath ✔️

序列化

标题 二进制兼容 源兼容
反序列化 -0 时,DataContractSerializer 会保留符号 ✔️
TimeSpan 的默认序列化格式 ✔️
IAsyncEnumerable 序列化 ✔️
JSON 源-生成 API 重构 ✔️
集合属性上的 JsonNumberHandlingAttribute ✔️
新的 JsonSerializer 源生成器重载 ✔️

Windows 窗体

标题 二进制兼容 源兼容
C# 模板使用应用程序启动 ✔️
所选的 TableLayoutSettings 属性会引发 InvalidEnumArgumentException ✔️
与 DataGridView 相关的 API 现在引发 InvalidOperationException ✔️
ListViewGroupCollection 方法引发新的 InvalidOperationException ✔️
增加了 NotifyIcon.Text 最大文本长度 ✔️
仅在需要时调用 ScaleControl ✔️
一些 API 引发 ArgumentNullException ✔️
如果节点被分配到其他地方,则 TreeNodeCollection.Item 抛出异常 ✔️

XML 和 XSLT

标题 二进制兼容 源兼容
针对无效索引的 XNodeReader.GetAttribute 行为 ✔️

另请参阅