.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

XML 和 XSLT

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

另请参阅