.NET 10 中的破坏性更改

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

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

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

  • 源不兼容 - 使用新 SDK 或组件重新编译或面向新运行时时,现有源代码可能需要进行源更改才能成功编译。

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

注释

本文是当前正在进行的工作。 这并不是 .NET 10 中的中断性变更的完整列表。

ASP.NET Core

请参阅 ASP.NET Core 10 中的重大更改

容器

Title 更改类型
默认的 .NET 映像是使用 Ubuntu 的 行为更改

Core .NET 库

Title 更改类型
API 过时 源代码不兼容
ActivitySource.CreateActivity 和 ActivitySource.StartActivity 行为更改 行为更改
Arm64 SVE 非错误加载需要掩码 二进制/源代码不兼容
BufferedStream.WriteByte 不再执行隐式刷新 行为更改
使用跨度参数 C# 14 重载解析 行为更改
泛型数学中的一致移动行为 行为更改
已更新为 W3C 标准的默认跟踪上下文传播器 行为更改
DriveInfo.DriveFormat 返回 Linux 文件系统类型 行为更改
从 DefaultValueAttribute ctor 中删除了动态AccessedMembers 注释 二进制/源代码不兼容
InlineArray 不允许显式结构大小 二进制不兼容
FilePatternMatch.Stem 更改为非空 源不兼容/行为变更
GnuTarEntry 和 PaxTarEntry 默认不再包含 atime 和 ctime 行为更改
LDAP DirectoryControl 分析现在更严格 行为更改
MacCatalyst 版本规范化 行为更改
.NET 运行时不再提供默认终止信号处理程序 行为更改
核心库中包含的 System.Linq.AsyncEnumerable 源代码不兼容
Type.MakeGenericSignatureType 参数验证 行为更改

Cryptography

Title 更改类型
CompositeMLDsa 已更新为 draft-08 行为更改
CoseSigner.Key 可以为 null 行为/源不兼容变更
MLDsa 和 SlhDsa “SecretKey” 成员已重命名 源代码不兼容
macOS 不支持 OpenSSL 加密基元 行为更改
Unix 上需要 OpenSSL 1.1.1 或更高版本 行为更改
X500DistinguishedName 验证更严格 行为更改
X509Certificate 和 PublicKey 密钥参数可以为 null 行为/源不兼容变更
已重命名为DOTNET_OPENSSL_VERSION_OVERRIDE的环境变量 行为更改

Entity Framework Core

请参阅 EF Core 10 中的重大变更

Extensions

Title 更改类型
BackgroundService 将所有 ExecuteAsync 作为任务运行 行为更改
使用 AnyKey 修复 GetKeyedService() 和 GetKeyedServices() 中的问题 行为更改
配置中保留的 Null 值 行为更改
控制台日志输出中不再复制消息 行为更改
ProviderAliasAttribute 已移动到 Microsoft.Extensions.Logging.Abstractions 程序集 源代码不兼容
从修剪不安全的 Microsoft.Extensions.Configuration 代码中移除了 DynamicallyAccessedMembers 注释 二进制不兼容

Globalization

Title 更改类型
已重命名为DOTNET_ICU_VERSION_OVERRIDE的环境变量 行为更改

安装工具

Title 更改类型
dotnet.acquire 接口 在 VS Code 中不再总是下载最新版本 行为更改

Interop

Title 更改类型
将 IDispatchEx COM 对象强制转换为 IReflect 无法成功 行为更改
单文件应用不再在可执行目录中查找本机库 行为更改
指定 DllImportSearchPath.AssemblyDirectory 只会搜寻程序集目录 行为更改

网络

Title 更改类型
默认情况下,使用 PublishTrimmed 禁用 HTTP/3 支持 源代码不兼容
MailAddress 对连续点强制实施验证 行为更改
默认情况下在浏览器 HTTP 客户端中启用流式处理 HTTP 响应 行为更改
Uri 已删除长度限制 行为更改

Reflection

Title 更改类型 引入的版本
InvokeMember/FindMembers/DeclaredMembers 上的更多受限批注 行为不兼容/源代码不兼容
Type.MakeGenericSignatureType 参数验证 行为更改

SDK 和 MSBuild

Title 更改类型
在用户方案中,.NET CLI --interactive 默认为true 行为更改
dotnet CLI 命令将非命令相关数据记录到 stderr 行为更改
.NET 工具打包创建特定于 RuntimeIdentifier 的工具包 行为更改
从“松散清单”到“工作负荷集”模式的默认工作负荷配置 行为更改
DefineConstants 用于评估时不可用的目标框架 行为更改
代码覆盖率 EnableDynamicNativeInstrumentation 默认为 false 行为更改
dnx 脚本绕过 global.json 的 SDK 选择 行为更改
.NET SDK 中不再包含dnx.ps1 文件 源代码不兼容
不允许使用文件级指令中的双引号 源代码不兼容
dotnet new sln 默认为 SLNX 文件格式 行为更改
dotnet package list 执行数据恢复 行为更改
dotnet restore 审核可传递包 行为更改
dotnet tool install --local 默认情况下创建清单 行为更改
dotnet watch 将日志记录到 stderr 而不是 stdout 行为更改
不支持project.json dotnet restore 源代码不兼容
SHA-1 指纹支持已弃用 dotnet nuget sign 行为更改
MSBUILDCUSTOMBUILDEVENTWARNING 安全门已删除 行为更改
MSBuild 自定义文化资源处理 行为更改
因 NuGet 剪裁的直接引用而引发 NU1510 源代码不兼容
没有运行时资产的 NuGet 包未包含在 deps.json 源代码不兼容
没有版本的 PackageReference 引发错误 行为更改
PrunePackageReference 将直接可修剪的引用私有化 行为更改
dotnet package listdotnet package search 中的 HTTP 警告升级为错误 行为/源不兼容变更
已删除NUGET_ENABLE_ENHANCED_HTTP_RETRY环境变量 行为更改
NuGet 记录了由于包标识符无效而生成的错误 行为更改
ToolCommandName 未对非工具包进行设置 源代码不兼容

Serialization

Title 更改类型
System.Text.Json 检查属性名称冲突 行为更改
XmlSerializer 不再忽略使用 ObsoleteAttribute 标记的属性 行为更改

Windows 窗体

Title 更改类型
API 过时 源代码不兼容
引用 WPF 和 WinForms 的应用程序必须消除 MenuItem 和 ContextMenu 类型的歧义 源代码不兼容
HtmlElement.InsertAdjacentElement 中已重命名参数 源代码不兼容
TreeView 复选框图像截断 行为更改
StatusStrip 默认使用系统 RenderMode 行为更改
System.Drawing 的 OutOfMemoryException 更名为 ExternalException 行为更改

Windows Presentation Foundation (WPF)

Title 更改类型
不允许空的 ColumnDefinitions 和 RowDefinitions 源代码不兼容
DynamicResource 的用法不正确会导致应用程序崩溃 源不兼容/行为变更