.NET 8 中的中断性变更

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

本文将每个中断性变更分类为“二进制不兼容”或“源不兼容”,或者作为“行为更改”:

  • 二进制文件不兼容 - 当针对新的运行时或组件运行时,现有二进制文件可能会遇到行为上的中断性变更(例如加载或执行失败),如果是这样,则需要重新编译。

  • 源代码不兼容 - 当使用新的 SDK 或组件重新编译,或以新的运行时为目标时,现有源代码可能需要更改源才能成功编译。

  • 行为更改 - 现有代码和二进制文件在运行时的行为可能会有所不同。 如果不需要新的行为,则需要更新和重新编译现有代码。

ASP.NET Core

标题 更改类型
ConcurrencyLimiterMiddleware 已过时 源不兼容
已移除用于序列化的自定义转换器 行为变更
ISystemClock 已过时 源不兼容
最小 API:IFormFile 参数需要防伪检查 行为变更
速率限制中间件需要 AddRateLimiter 行为变更
安全令牌事件将返回 JsonWebToken 行为变更
对于 Web SDK 项目,TrimMode 默认为 full 源不兼容

容器

Title 更改类型
从 Alpine 映像中移除了“ca-certificates”包 不兼容二进制
Debian 容器映像已升级到 Debian 12 二进制不兼容/行为变更
默认 ASP.NET Core 端口已更改为 8080 行为变更
从 Alpine 和 Debian 映像中移除了 Kerberos 包 不兼容二进制
从 Alpine 映像中移除了“libintl”包 行为变更
多平台容器标记仅限 Linux 使用 行为变更
Linux 映像中的新“应用”用户 行为变更

Core .NET 库

标题 更改类型
null 时的活动操作名称 行为变更
AnonymousPipeServerStream.Dispose 行为 行为变更
API 已过时并带有自定义诊断 ID 源不兼容
Unix 文件路径中的反斜杠映射 行为变更
Base64.DecodeFromUtf8 方法忽略空格 行为变更
移除了布尔支持的枚举类型支持 行为变更
Complex.ToString 格式已更改为 <a; b> 行为变更
驱动器的当前目录路径枚举 行为变更
Enumerable.Sum 对某些输入抛出新的 OverflowException 行为变更
管道关闭时 FileStream 写入 行为变更
FindSystemTimeZoneById 不返回新对象 行为变更
GC.GetGeneration 可能会返回 Int32.MaxValue 行为变更
Unix 上的 GetFolderPath 行为 行为变更
GetSystemVersion 不再返回 ImageRuntimeVersion 行为变更
ITypeDescriptorContext 可为空注释 源不兼容
旧版 Console.ReadKey 已删除 行为变更
方法生成器生成将 HasDefaultValue 设置为 false 的参数 行为变更
当 UseShellExecute 为 false 时,将遵循 ProcessStartInfo.WindowStyle 行为变更
RuntimeIdentifier 返回为其生成了运行时的平台 行为变更
Type.GetType 会针对所有无效元素类型引发异常 行为变更

加密

标题 更改类型 已引入
macOS 上的 AesGcm 身份验证标记大小 行为变更 预览版 1
RSA.EncryptValue 和 RSA.DecryptValue 过时 源不兼容 预览版 1

部署

标题 更改类型
主机确定特定于 RID 的资产 二进制不兼容/行为变更
.NET Monitor 仅包括无发行版映像 行为变更
StripSymbols 默认为 true 行为变更

Entity Framework Core

EF Core 8 中的中断性变更

Extensions

标题 更改类型
ActivatorUtilities.CreateInstance 的行为保持一致 行为变更
ActivatorUtilities.CreateInstance 需要非 null 提供程序 行为变更
ConfigurationBinder 因值不一致而引发异常 行为变更
ConfigurationManager 包不再引用 System.Security.Permissions 源不兼容
DirectoryServices 包不再引用 System.Security.Permissions 源不兼容
配置绑定器添加到字典的空键 行为变更
HostApplicationBuilder ctor 遵循的 HostApplicationBuilderSettings.Args 行为变更
ManagementDateTimeConverter.ToDateTime 返回本地时间 行为变更
System.Formats.Cbor DateTimeOffset 格式设置更改 行为变更

全球化

标题 更改类型
日期和时间转换器使用区域性参数 行为变更
TwoDigitYearMax 默认值为 2049 行为变更

Interop

标题 更改类型
CreateObjectFlags.Unwrap 仅在目标实例上展开 行为变更
自定义封送器需要其他成员 源不兼容
已删除 IDispatchImplAttribute API 不兼容二进制
删除了 JSFunctionBinding 隐式公共默认构造函数 不兼容二进制
SafeHandle 类型必须具有公共构造函数 源不兼容

网络

标题 更改类型
SendFile 对于无连接套接字抛出 NotSupportedException 行为变更

反射

标题 更改类型
IntPtr 不再用于函数指针类型 行为变更

SDK

标题 更改类型
CLI 控制台输出使用 UTF-8 行为变更/源和二进制不兼容
完成后控制台编码不是 UTF-8 行为变更/二进制不兼容
容器默认使用“latest”标记 行为变更
“dotnet pack”使用发布配置 行为变更/源不兼容
“dotnet publish”使用发布配置 行为变更/源不兼容
-getItem、-getProperty 和 -getTargetResult 的重复输出 行为变更
不再添加 System.Net.Http 的隐式 using 行为变更/源不兼容
MSBuild 自定义派生生成事件已弃用 行为变更
MSBuild 遵循 DOTNET_CLI_UI_LANGUAGE 行为变更
特定于运行时的应用不是自包含的 源/二进制不兼容
--arch 选项不意味着自包含 行为变更
“dotnet restore”生成安全漏洞警告 行为变更
SDK 使用更小的 RID 图 行为变更/源不兼容
将 DebugSymbols 设置为 false 会禁用 PDB 生成 行为变更
.NET SDK 中包含源链接 源不兼容
剪裁可能无法与 .NET Standard 或 .NET Framework 配合使用 行为变更
默认情况下不为 .NET 工具安装未列出的包 行为变更
在外部生成中导入 .user 文件 行为变更
.NET 8 SDK 的版本要求 源不兼容

序列化

标题 更改类型
已针对大多数项目禁用 BinaryFormatter 行为变更
PublishedTrimmed 项目会让基于反射的序列化失败 行为变更
基于反射的反序列化程序主动解析元数据 行为变更

Windows 窗体

标题 更改类型
定位点布局变更 行为变更
在 PictureBox 中加载远程映像之前检查的证书 行为变更
DateTimePicker.Text 为空字符串 行为变更
从某些属性中删除了 DefaultValueAttribute 行为变更
ExceptionCollection 构造函数引发 ArgumentException 行为变更
窗体根据 AutoScaleMode 缩放 行为变更
ImageList.ColorDepth 默认值为 Depth32Bit 行为变更
System.Windows.Extensions 不引用 System.Drawing.Common 源不兼容
TableLayoutStyleCollection 引发 ArgumentException 行为变更
顶级窗体将最小和最大大小缩放为 DPI 行为变更
WFDEV002 过时现在为错误 源不兼容

另请参阅