如果要将应用迁移到 .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
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 list 和 dotnet 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 |