.NET 10 中的破坏性更改

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

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

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

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

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

Note

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

ASP.NET Core

Title 更改类型
对已知 API 终结点禁用 Cookie 登录重定向 行为更改
弃用 WithOpenApi 扩展方法 源代码不兼容
TryHandleAsync 返回 true 时,异常诊断被抑制 行为更改
IActionContextAccessor 和 ActionContextAccessor 已过时 源不兼容/行为变更
IncludeOpenAPIAnalyzers 属性和 MVC API 分析器已弃用 源代码不兼容
IPNetwork 和 ForwardedHeadersOptions.KnownNetworks 已过时 源代码不兼容
Microsoft.Extensions.ApiDescription.Client 包已弃用 源代码不兼容
Razor 运行时编译已过时 源代码不兼容
WebHostBuilder、IWebHost 和 WebHost 已过时 源代码不兼容

容器

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

Core .NET 库

Title 更改类型
ActivitySource.CreateActivity 和 ActivitySource.StartActivity 行为更改 行为更改
Arm64 SVE 非错误加载需要掩码 二进制/源代码不兼容
BufferedStream.WriteByte 不再执行隐式刷新 行为更改
使用跨度参数 C# 14 重载解析 行为更改
泛型数学中的一致移动行为 行为更改
已更新为 W3C 标准的默认跟踪上下文传播器 行为更改
DriveInfo.DriveFormat 返回 Linux 文件系统类型 行为更改
从 DefaultValueAttribute ctor 中删除了动态AccessedMembers 注释 二进制/源代码不兼容
InlineArray 不允许显式结构大小 二进制不兼容
FilePatternMatch.Stem 更改为不可为 null 源不兼容/行为变更
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 支持 源代码不兼容
默认情况下在浏览器 HTTP 客户端中启用流式处理 HTTP 响应 行为更改
Uri 已删除长度限制 行为更改

Reflection

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

SDK 和 MSBuild

Title 更改类型
在用户方案中,.NET CLI --interactive 默认为true 行为更改
dotnet CLI 命令将非命令相关数据记录到 stderr 行为更改
.NET 工具打包创建特定于 RuntimeIdentifier 的工具包 行为更改
从“松散清单”到“工作负荷集”模式的默认工作负荷配置 行为更改
代码覆盖率 EnableDynamicNativeInstrumentation 默认为 false 行为更改
.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 privatizes 直接可修剪引用 行为更改
dotnet package listdotnet package search 中的 HTTP 警告升级为错误 行为/源不兼容变更
已删除NUGET_ENABLE_ENHANCED_HTTP_RETRY环境变量 行为更改
NuGet 记录无效包 ID 的错误 行为更改
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 的用法不正确会导致应用程序崩溃 源不兼容/行为变更