.NET 6 中的中断性变更
如果要将应用迁移到 .NET 6,则此处列出的中断性变更可能会影响到你。 变更按技术领域分组,例如 ASP.NET Core 或 Windows 窗体。
本文指出每个中断性变更是二进制兼容还是源兼容:
- 二进制兼容 - 现有二进制文件无需重新编译即可成功加载和执行,并且运行时行为不会更改。
- 源兼容 - 面向新运行时或使用新 SDK 或组件时,源代码将成功编译,且不会发生更改。
ASP.NET Core
容器
标题 | 二进制兼容 | 源兼容 |
---|---|---|
容器映像中的默认控制台记录器格式设置 | ✔️ | ❌ |
有关 .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
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 窗体
XML 和 XSLT
标题 | 二进制兼容 | 源兼容 |
---|---|---|
针对无效索引的 XNodeReader.GetAttribute 行为 | ✔️ | ❌ |