.NET 10 中的破坏性更改

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

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

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

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

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

Note

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

ASP.NET Core

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

容器

Title 更改类型 引入的版本
默认的 .NET 映像是使用 Ubuntu 的 行为更改 预览版 1

Core .NET 库

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

Cryptography

Title 更改类型 引入的版本
CoseSigner.Key 可以为 null 行为/源不兼容变更 预览版 7
MLDsa 和 SlhDsa “SecretKey” 成员已重命名 源代码不兼容 RC 1
macOS 不支持 OpenSSL 加密基元 行为更改 预览版 6
X500DistinguishedName 验证更严格 行为更改 预览版 1
X509Certificate 和 PublicKey 密钥参数可以为 null 行为/源不兼容变更 预览版 3
已重命名为DOTNET_OPENSSL_VERSION_OVERRIDE的环境变量 行为更改 预览版 1

Entity Framework Core

EF Core 10 中的重大变更

Extensions

Title 更改类型 引入的版本
BackgroundService 将所有 ExecuteAsync 作为任务运行 行为更改 预览版 1
配置中保留的 Null 值 行为更改 预览版 7
控制台日志输出中不再复制消息 行为更改 预览版 7
ProviderAliasAttribute 已移动到 Microsoft.Extensions.Logging.Abstractions 程序集 源代码不兼容 预览版 4
从修剪不安全的 Microsoft.Extensions.Configuration 代码中移除了 DynamicallyAccessedMembers 注释 二进制不兼容 预览版 6

Globalization

Title 更改类型 引入的版本
已重命名为DOTNET_ICU_VERSION_OVERRIDE的环境变量 行为更改 预览版 1

Interop

Title 更改类型 引入的版本
单文件应用不再在可执行目录中查找本机库 行为更改 预览版 6
指定 DllImportSearchPath.AssemblyDirectory 只会搜寻程序集目录 行为更改 预览版 5

网络

Title 更改类型 引入的版本
默认情况下,使用 PublishTrimmed 禁用 HTTP/3 支持 源代码不兼容 预览版 6
默认情况下在浏览器 HTTP 客户端中启用流式处理 HTTP 响应 行为更改 预览版 3
Uri 已删除长度限制 行为更改 预览版 7

SDK 和 MSBuild

Title 更改类型 引入的版本
在用户方案中,.NET CLI --interactive 默认为true 行为更改 预览版 3
dotnet CLI 命令将非命令相关数据记录到 stderr 行为更改 RC 2
.NET 工具打包创建特定于 RuntimeIdentifier 的工具包 行为更改 预览版 6
从“松散清单”到“工作负荷集”模式的默认工作负荷配置 行为更改 预览版 2
.NET SDK 中不再包含dnx.ps1 文件 源代码不兼容 GA
dotnet new sln 默认为 SLNX 文件格式 行为更改 RC 1
dotnet package list 执行数据恢复 行为更改 预览版 4
dotnet restore 审核可传递包 行为更改 预览版 3
dotnet tool install --local 默认情况下创建清单 行为更改 预览版 7
dotnet watch 将日志记录到 stderr 而不是 stdout 行为更改 RC 2
不支持project.json dotnet restore 源代码不兼容 预览版 7
SHA-1 指纹支持已弃用 dotnet nuget sign 行为更改 预览版 1
MSBUILDCUSTOMBUILDEVENTWARNING 安全门已删除 行为更改 预览版 1
MSBuild 自定义文化资源处理 行为更改 预览版 1
因 NuGet 剪裁的直接引用而引发 NU1510 源代码不兼容 预览版 1
没有运行时资产的 NuGet 包未包含在 deps.json 源代码不兼容 预览版 5
没有版本的 PackageReference 引发错误 行为更改 预览版 6
PrunePackageReference privatizes 直接可修剪引用 行为更改 预览版 7
.NET 10 SDK 的版本要求 行为更改 RC 2
dotnet package listdotnet package search 中的 HTTP 警告升级为错误 行为/源不兼容变更 预览版 4
已删除NUGET_ENABLE_ENHANCED_HTTP_RETRY环境变量 行为更改 预览版 6
NuGet 记录无效包 ID 的错误 行为更改 RC 1

Serialization

Title 更改类型 引入的版本
XmlSerializer 不再忽略使用 ObsoleteAttribute 标记的属性 行为更改 预览版 1

Windows 窗体

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

Windows Presentation Foundation (WPF)

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