.NET 6 中的中断性变更
如果要将应用迁移到 .NET 6,则此处列出的中断性变更可能会影响到你。 变更按技术领域分组,例如 ASP.NET Core 或 Windows 窗体。
本文指出每个中断性变更是二进制兼容还是源兼容:
- 二进制兼容 - 现有二进制文件无需重新编译即可成功加载和执行,并且运行时行为不会更改。
- 源兼容 - 面向新运行时或使用新 SDK 或组件时,源代码将成功编译,且不会发生更改。
ASP.NET Core
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
ActionResult<T> 将 StatusCode 设置为 200 | ✔️ | ❌ | |
AddDataAnnotationsValidation 方法已过时 | ✔️ | ❌ | |
从 Microsoft.AspNetCore.App 共享框架中删除了程序集 | ❌ | ✔️ | |
Blazor:RequestImageFileAsync 方法中的参数名称已更改 | ✔️ | ❌ | 预览版 1 |
Blazor:已替换 WebEventDescriptor.EventArgsType 属性 | ❌ | ❌ | |
Blazor:字节数组互操作 | ✔️ | ❌ | 预览版 6 |
Changed MessagePack library in @microsoft/signalr-protocol-msgpack | ❌ | ✔️ | |
ClientCertificate 属性不会对 HttpSys 触发重新协商 | ✔️ | ❌ | |
EndpointName 元数据不自动设置 | ✔️ | ❌ | RC 2 |
标识:已更改 UI 的默认 Bootstrap 版本 | ❌ | ❌ | |
Kestrel:日志消息属性已更改 | ✔️ | ❌ | |
Microsoft.AspNetCore.Http.Features 拆分 | ❌ | ✔️ | |
中间件:HTTPS 重定向中间件会在 HTTPS 端口不明确时引发异常 | ✔️ | ❌ | |
中间件:新 Use 重载 | ✔️ | ❌ | 预览版 4 |
RC 1 中的最小 API 重命名 | ❌ | ❌ | RC 1 |
RC 2 中的最小 API 重命名 | ❌ | ❌ | RC 2 |
使用 System.Text.Json 时,MVC 不缓冲 IAsyncEnumerable 类型 | ✔️ | ❌ | 预览版 4 |
可以为 Null 的引用类型注释已更改 | ✔️ | ❌ | |
已过时和已删除的 API | ✔️ | ❌ | 预览版 1 |
默认不配置 PreserveCompilationContext | ❌ | ✔️ | |
Razor:编译器不再生成 Views 程序集 | ✔️ | ❌ | 预览版 3 |
Razor:日志记录 ID 更改 | ❌ | ✔️ | RC1 |
Razor:RazorEngine API 标记为已过时 | ✔️ | ❌ | 预览版 1 |
SignalR:Java 客户端已更新为 RxJava3 | ❌ | ✔️ | 预览版 4 |
验证 TryParse 和 BindAsync 方法 | ❌ | ❌ | RC 2 |
容器
Title | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
容器映像中的默认控制台记录器格式设置 | ✔️ | ❌ | 维护版本 6.0.6 |
有关 .NET 6 中容器的其他重大更改的信息,请参阅 .NET 6 容器发行说明。
Core .NET 库
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
API 已过时并带有非默认诊断 ID | ✔️ | ❌ | 预览版 1 |
对可以为 Null 的引用类型注释的更改 | ✔️ | ❌ | 预览版 1-2 |
“调试”方法中的条件字符串计算 | ✔️ | ❌ | RC 1 |
Windows 上的 Environment.ProcessorCount 行为 | ✔️ | ❌ | 预览版 2 |
EventSource 回调行为 | ✔️ | ✔️ | 维护 |
Unix 上的 File.Replace 引发匹配 Windows 的异常 | ✔️ | ❌ | 预览版 7 |
FileStream 使用 Unix 上的共享锁来锁定文件 | ❌ | ✔️ | 预览版 1 |
FileStream 不再将文件偏移量与操作系统同步 | ❌ | ❌ | 预览版 4 |
FileStream.Position 在 ReadAsync 或 WriteAsync 完成后更新 | ❌ | ❌ | 预览版 4 |
过时 API 的新诊断 ID | ✔️ | ❌ | 预览版 5 |
AssociatedMetadataTypeTypeDescriptionProvider 中新的可为 Null 的注释 | ✔️ | ❌ | RC 2 |
新的 System.Linq.Queryable 方法重载 | ✔️ | ❌ | 预览版 3-4 |
已从包中删除较旧的框架版本 | ❌ | ✔️ | 预览版 5 |
参数名称已更改 | ✔️ | ❌ | 预览版 1 |
数据流派生类型中的参数名称 | ✔️ | ❌ | 预览版 1 |
DeflateStream、GZipStream 和 CryptoStream 中的部分和零字节读取 | ✔️ | ❌ | 预览版 6 |
在 Windows 只读文件上设置时间戳 | ❌ | ✔️ | 维护服务 6.0.2 |
标准数字格式分析精度 | ✔️ | ❌ | 预览版 2 |
接口中的静态抽象成员 | ❌ | ✔️ | 预览版 7 |
StringBuilder.Append 重载和计算顺序 | ❌ | ✔️ | RC 1 |
强名称 API 引发 PlatformNotSupportedException | ❌ | ✔️ | 预览版 4 |
仅在 Windows 上支持 System.Drawing.Common | ❌ | ❌ | 预览版 7 |
System.Security.SecurityContext 被标记为过时 | ✔️ | ❌ | RC 1 |
Task.FromResult 可能返回单一实例 | ❌ | ✔️ | 预览版 1 |
来自 BackgroundService 的未经处理的异常 | ✔️ | ❌ | 预览版 4 |
密码
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
CreateEncryptor 方法针对不正确的反馈大小引发异常 | ❌ | ✔️ | 预览版 7 |
部署
Title | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
64 位 Windows 上的 x86 主机路径 | ✔️ | ✔️ | 维护版本 |
Entity Framework Core
扩展
Title | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
AddProvider 检查非 null 提供程序 | ✔️ | ❌ | RC 1 |
FileConfigurationProvider.Load 引发 InvalidDataException | ✔️ | ❌ | RC 1 |
重复的 XML 元素包括索引 | ❌ | ✔️ | |
解析已释放的 ServiceProvider 引发异常 | ✔️ | ❌ | RC 1 |
全球化
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
全球化固定模式下的区域性创建和大小写映射 | 预览版 7 |
Interop
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
接口中的静态抽象成员 | ❌ | ✔️ | 预览版 7 |
JIT 编译器
Title | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
根据 ECMA-335 强制调用参数 | ✔️ | ✔️ | 预览版 1 |
网络
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
从 SPN 中删除了用于 Kerberos 和协商的端口 | ❌ | ✔️ | RC 1 |
WebRequest、WebClient 和 ServicePoint 已过时 | ✔️ | ❌ | 预览版 1 |
SDK
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
dotnet run 的 -p 选项已弃用 |
✔️ | ❌ | 预览版 6 |
早期版本不支持模板中的 C# 代码 | ✔️ | ✔️ | 预览版 7 |
隐式包含 EditorConfig 文件 | ✔️ | ❌ | |
生成适用于 macOS 的 apphost | ✔️ | ❌ | 预览版 6 |
针对发布输出中的重复文件生成错误 | ❌ | ✔️ | 预览版 1 |
从 ProjectReference 协议中删除了 GetTargetFrameworkProperties 和 GetNearestTargetFramework | ❌ | ✔️ | 预览版 1 |
Arm64 上模拟 x64 的安装位置 | ✔️ | ❌ | RC 2 |
MSBuild 不再支持调用 GetType() | RC 1 | ||
无法将 .NET 安装到自定义位置 | ✔️ | ✔️ | |
OutputType 不会自动设置为 WinExe | ✔️ | ❌ | RC 1 |
使用 --no-restore 发布 ReadyToRun 需要更改 | ✔️ | ❌ | 6.0.100 |
不生成 runtimeconfig.dev.json 文件 | ❌ | ✔️ | 6.0.100 |
未指定自包含时出现 RuntimeIdentifier 警告 | ✔️ | ❌ | RC 1 |
根文件夹中的工具清单 | ✔️ | ✔️ | 6.0.4xx、6.0.3xx、6.0.1xx |
.NET 6 SDK 的版本要求 | ✔️ | ✔️ | 6.0.300 |
.version 文件包括生成版本 | ✔️ | ✔️ | 6.0.401 |
将引用程序集写入 IntermediateOutputPath | ❌ | ✔️ | 6.0.200 |
序列化
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
反序列化 -0 时,DataContractSerializer 会保留符号 | ❌ | ✔️ | 维护 6.0.11 |
TimeSpan 的默认序列化格式 | ❌ | ✔️ | 维护服务 6.0.2 |
IAsyncEnumerable 序列化 | ✔️ | ❌ | 预览版 4 |
JSON 源-生成 API 重构 | ❌ | ✔️ | RC 2 |
集合属性上的 JsonNumberHandlingAttribute | ❌ | ✔️ | RC 1 |
新的 JsonSerializer 源生成器重载 | ❌ | ✔️ | 预览版 6 |
Windows 窗体
标题 | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
C# 模板使用应用程序启动 | ✔️ | ❌ | RC 1 |
所选的 TableLayoutSettings 属性会引发 InvalidEnumArgumentException | ❌ | ✔️ | 预览版 1 |
与 DataGridView 相关的 API 现在引发 InvalidOperationException | ❌ | ✔️ | 预览版 4 |
ListViewGroupCollection 方法引发新的 InvalidOperationException | ❌ | ✔️ | RC 2 |
增加了 NotifyIcon.Text 最大文本长度 | ❌ | ✔️ | 预览版 1 |
仅在需要时调用 ScaleControl | ✔️ | ❌ | 维护 6.0.101 |
一些 API 引发 ArgumentNullException | ❌ | ✔️ | 预览版 1-4 |
如果节点被分配到其他地方,则 TreeNodeCollection.Item 抛出异常 | ❌ | ✔️ | 预览版 1 |
XML 和 XSLT
Title | 二进制兼容 | 源兼容 | 已引入 |
---|---|---|---|
XmlDocument.XmlResolver 为 Null 性更改 | ❌ | ✔️ | RC 1 |
针对无效索引的 XNodeReader.GetAttribute 行为 | ✔️ | ❌ | 预览版 2 |