.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 行为

另请参阅