如果要将应用迁移到 .NET 8,则此处列出的中断性变更可能会影响到你。 变更按技术领域分组,例如 ASP.NET Core 或 Windows 窗体。
本文将每个中断性变更分类为二进制不兼容或源不兼容,或者作为行为更改:
二进制文件不兼容 - 当针对新的运行时或组件运行时,现有二进制文件可能会遇到行为上的中断性变更(例如加载或执行失败),如果是这样,则需要重新编译。
源代码不兼容 - 当使用新的 SDK 或组件重新编译,或以新的运行时为目标时,现有源代码可能需要更改源才能成功编译。
行为更改 - 现有代码和二进制文件在运行时的行为可能会有所不同。 如果不需要新的行为,则需要更新和重新编译现有代码。
ASP.NET Core
| 标题 | 更改类型 |
|---|---|
| ConcurrencyLimiterMiddleware 已过时 | 源不兼容 |
| 已移除用于序列化的自定义转换器 | 行为变更 |
| 转发标头中间件忽略来自未知代理的 X-Forwarded-* 标头 | 行为变更 |
| HTTP 日志记录中间件需要 AddHttpLogging() | 行为变更 |
| ISystemClock 已过时 | 源不兼容 |
| 最小 API:IFormFile 参数需要防伪检查 | 行为变更 |
| 速率限制中间件需要 AddRateLimiter | 行为变更 |
| 安全令牌事件将返回 JsonWebToken | 行为变更 |
| 对于 Web SDK 项目,TrimMode 默认为 full | 源不兼容 |
容器
| 标题 | 更改类型 |
|---|---|
| 从 Alpine 映像中移除了“ca-certificates”包 | 不兼容二进制 |
| Debian 容器映像已升级到 Debian 12 | 二进制不兼容/行为变更 |
| 默认 ASP.NET Core 端口已更改为 8080 | 行为变更 |
| 从 Alpine 和 Debian 映像中移除了 Kerberos 包 | 不兼容二进制 |
| 从 Alpine 映像中移除了“libintl”包 | 行为变更 |
| 多平台容器标记仅限 Linux 使用 | 行为变更 |
| Linux 映像中的新“应用”用户 | 行为变更 |
Core .NET 库
加密
| 标题 | 更改类型 | 已引入 |
|---|---|---|
| macOS 上的 AesGcm 身份验证标记大小 | 行为变更 | 预览版 1 |
| RSA.EncryptValue 和 RSA.DecryptValue 过时 | 源不兼容 | 预览版 1 |
部署
| 标题 | 更改类型 |
|---|---|
| 主机确定特定于 RID 的资产 | 二进制不兼容/行为变更 |
| .NET Monitor 仅包括无发行版映像 | 行为变更 |
| StripSymbols 默认为 true | 行为变更 |
Entity Framework Core
插件
全球化
| 标题 | 更改类型 |
|---|---|
| 日期和时间转换器使用区域性参数 | 行为变更 |
| TwoDigitYearMax 默认值为 2049 | 行为变更 |
互作
| 标题 | 更改类型 |
|---|---|
| CreateObjectFlags.Unwrap 仅在目标实例上展开 | 行为变更 |
| 自定义封送器需要其他成员 | 源不兼容 |
| 已删除 IDispatchImplAttribute API | 不兼容二进制 |
| 删除了 JSFunctionBinding 隐式公共默认构造函数 | 不兼容二进制 |
| SafeHandle 类型必须具有公共构造函数 | 源不兼容 |
Linux 原生库解析不再使用 netcoredeps |
行为变更 |
网络
| 标题 | 更改类型 |
|---|---|
| SendFile 对于无连接套接字抛出 NotSupportedException | 行为变更 |
系统会比较 mailto: URI 中的用户信息 |
行为变更 |
反射
| 标题 | 更改类型 |
|---|---|
| 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”生成安全漏洞警告 | 行为变更 |
| 如果源未提供漏洞数据,“dotnet list package”将发出警告 | 行为变更 |
| SDK 使用更小的 RID 图 | 行为变更/源不兼容 |
| 将 DebugSymbols 设置为 false 会禁用 PDB 生成 | 行为变更 |
| .NET SDK 中包含源链接 | 源不兼容 |
| 剪裁可能无法与 .NET Standard 或 .NET Framework 配合使用 | 行为变更 |
| 默认情况下不为 .NET 工具安装未列出的包 | 行为变更 |
| 在外部生成中导入 .user 文件 | 行为变更 |
| .NET 8 SDK 的版本要求 | 源不兼容 |
序列化
| 标题 | 更改类型 |
|---|---|
| 已针对大多数项目禁用 BinaryFormatter | 行为变更 |
| PublishedTrimmed 项目会让基于反射的序列化失败 | 行为变更 |
| 基于反射的反序列化程序主动解析元数据 | 行为变更 |