如果要将应用迁移到 .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
Extensions
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
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 的用法不正确会导致应用程序崩溃 | 源不兼容/行为变更 |