.NET 7 中的中断性变更

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

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

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

ASP.NET Core

标题 二进制兼容 源兼容
API 控制器操作尝试从 DI 推断参数 ✔️
以 ASPNET 为前缀的环境变量优先级 ✔️ ✔️
远程身份验证提供程序的 AuthenticationAsync ✔️
WebAssembly 应用中的身份验证 ✔️
默认身份验证方案 ✔️
某些 Microsoft.AspNetCore.Mvc.Core 日志消息的事件 ID 已更改 ✔️
回退文件终结点 ✔️
IHubClients 和 IHubCallerClients 隐藏成员 ✔️
Kestrel:已删除默认 HTTPS 绑定 ✔️
已删除 Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv and libuv.dll
Microsoft.Data.SqlClient 已更新到 4.0.1 ✔️
中间件不再遵从具有 null 请求委托的终结点 ✔️
MVC 对模型绑定中空主体的检测已更改 ✔️
输出缓存 API 更改
SignalR 中心方法尝试从 DI 解析参数 ✔️

Core .NET 库

标题 二进制兼容 源兼容
API 已过时并带有默认诊断 ID ✔️
API 已过时并带有非默认诊断 ID ✔️
BinaryFormatter 序列化 API 生成编译器错误 ✔️
BrotliStream 不再允许未定义的 CompressionLevel 值 ✔️
Visual Studio 中的 C++/CLI 项目 ✔️
反射调用 API 异常的更改 ✔️
不可回收的 AssemblyLoadContext 中的可回收程序集 ✔️
DateTime 加法方法精度更改 ✔️ ✔️
NaN 的 equals 方法行为变更 ✔️
EventSource 回调行为 ✔️ ✔️
PatternContext<T> 上的泛型类型约束
删除了旧版 FileStream 策略 ✔️
对较旧框架的库支持
数字格式字符串的最大精度 ✔️
更正了范围的正则表达式模式 ✔️ ✔️
SerializationFormat.Binary 已过时
删除了 System.Drawing.Common 配置开关 ✔️ ✔️
System.Runtime.CompilerServices.Unsafe NuGet 包 ✔️ ✔️
符号链接上的时间字段 ✔️
跟踪链接缓存条目 ✔️
验证 BrotliStream 的 CompressionLevel ✔️

配置

标题 二进制兼容 源兼容
app.config 中的 System.diagnostics 条目 ✔️

密码

标题 二进制兼容 源兼容
解密 EnvelopedCms 不会双重展开 ✔️
动态 X509ChainPolicy 验证时间 ✔️
X500DistinguishedName 解析易记名称 ✔️

部署

标题 二进制兼容 源兼容
默认裁剪的所有程序集 ✔️
已禁用多级查找 ✔️
64 位 Windows 上的 x86 主机路径 ✔️ ✔️
TrimmerDefaultAction 已弃用 ✔️

Entity Framework Core

EF Core 7 中的中断性变更

Extensions

标题 二进制兼容 源兼容
将配置绑定到字典扩展值 ✔️ ✔️
Windows Shell 启动的应用的 ContentRootPath ✔️
环境变量前缀 ✔️

全球化

标题 二进制兼容 源兼容
全球化 API 在 Windows Server 上使用 ICU 库 ✔️

Interop

标题 二进制兼容 源兼容
仿真环境下的 RuntimeInformation.OSArchitecture ✔️

.NET MAUI

标题 二进制兼容 源兼容
构造函数接受基接口而不是具体类型 ✔️
已移除流方向帮助程序方法
新的 UpdateBackground 参数 ✔️
已重命名 ScrollToRequest 属性
删除了某些 Windows API

网络

标题 二进制兼容 源兼容
AllowRenegotiation 默认为 false
Linux 上的自定义 ping 有效负载 ✔️
Socket.End 方法不引发 ObjectDisposedException ✔️

SDK 和 MSBuild

标题 二进制兼容 源兼容
某些项目的自动 RuntimeIdentifier ✔️
仅用于发布的自动 RuntimeIdentifier
CLI 控制台输出使用 UTF-8
完成后控制台编码不是 UTF-8 ✔️
.NET 7 中自定义类型的 MSBuild 序列化
并行 SDK 安装
根文件夹中的工具清单 ✔️ ✔️
.NET 7 SDK 的版本要求 ✔️ ✔️
dotnet test:将 -a 切换到别名 --arch,而不是 --test-adapter-path
dotnet test:将 -r 切换到别名 --runtime,而不是 --results-dir
--output 选项对解决方案级别的命令不再有效
SDK 不再调用 ResolvePackageDependencies ✔️

序列化

标题 二进制兼容 源兼容
反序列化 -0 时,DataContractSerializer 会保留符号 ✔️
使用前导空格或尾随空格反序列化版本类型 ✔️
JsonSerializerOptions 复制构造函数包括 JsonSerializerContext ✔️
对象类型的多态序列化 ✔️
System.Text.Json 源生成器回退 ✔️

Windows 窗体

标题 二进制兼容 源兼容
过时和警告 ✔️
一些 API 引发 ArgumentNullException ✔️

WPF

标题 二进制兼容 源兼容 向后兼容
在文本编辑器上还原拖放操作行为 ✔️ ✔️

XML 和 XSLT

标题 二进制兼容 源兼容
XmlSecureResolver 已过时

另请参阅