通过


.NET 5 中的破坏性变更

如果要将应用迁移到 .NET 5,此处列出的重大更改可能会影响你。 更改按技术领域分组,例如 ASP.NET 核心或加密。

本文指出每个中断性变更是二进制兼容还是源兼容:

  • 二进制兼容 - 现有二进制文件将在不重新编译的情况下成功加载和执行,并且运行时行为不会更改。
  • 源代码兼容 - 当面向新运行时或使用新的 SDK 或组件时,源代码将成功编译,而不会发生更改。

ASP.NET Core

请参阅 ASP.NET Core 5 中的中断性变更

代码分析

标题 二进制兼容 源代码兼容
CA1416 警告 ✔️
CA1417 警告 ✔️
CA1831 警告 ✔️
CA2013 警告 ✔️
CA2014 警告 ✔️
CA2015 警告 ✔️
CA2200 警告 ✔️
CA2247 警告 ✔️

核心 .NET 库

标题 二进制兼容 源代码兼容
适用于单文件发布的与程序集相关的 API 更改 ✔️
BinaryFormatter 序列化方法已过时 ✔️
代码访问安全 API 已过时 ✔️
CreateCounterSetInstance 会引发 InvalidOperationException ✔️
默认 ActivityIdFormat 为 W3C ✔️
Environment.OSVersion 返回正确的版本 ✔️
FrameworkDescription 的值是 .NET 而不是 .NET Core ✔️
GAC API 已过时 ✔️
硬件内在 IsSupported 检查 ✔️
IntPtr 和 UIntPtr 实现 IFormattable ✔️
LastIndexOf 处理空搜索字符串 ✔️
在 Unix 上使用非 ASCII 字符的 URI 路径 ✔️
API 已过时并带有非默认诊断 ID ✔️
ConsoleLoggerOptions 上的过时属性 ✔️
LINQ OrderBy.First 的复杂性 ✔️
已重命名或删除 OSPlatform 属性 ✔️
已删除 Microsoft.DotNet.PlatformAbstractions 包 ✔️
PrincipalPermissionAttribute 已过时 ✔️
预览版本中的参数名称更改 ✔️
引用程序集中的参数名称更改 ✔️
远程处理 API 已过时 ✔️
Activity.Tags 列表的顺序已反转 ✔️
SSE 和 SSE2 比较方法处理 NaN ✔️
Thread.Abort 已过时 ✔️
Unix 上的 UNC 路径的 URI 识别 ✔️
UTF-7 代码路径已过时 ✔️
Vector2.Lerp 和 Vector4.Lerp 的行为更改 ✔️
Vector<T> 抛出 NotSupportedException ✔️

密码学

标题 二进制兼容 源代码兼容
浏览器不支持加密 API ✔️
Cryptography.Oid 只能初始化 ✔️
Linux 上的默认 TLS 密码套件 ✔️
加密抽象上的 Create() 重载已过时 ✔️
默认 FeedbackSize 值已更改 ✔️

Entity Framework Core

请参阅 EF Core 5.0 中的重大更改

全球化

标题 二进制兼容 源代码兼容
在 Windows 上使用 ICU 库 ✔️
StringInfo 和 TextElementEnumerator 符合 UAX29 ✔️
拉丁语-1 字符的 Unicode 类别已更改 ✔️
TextInfo.ListSeparator 值已更改 ✔️

互作

标题 二进制兼容 源代码兼容
已删除对 WinRT 的支持 ✔️
将 RCW 强制转换为 InterfaceIsIInspectable 会引发异常 ✔️
不在非 Windows 平台上探测 A/W 后缀 ✔️

网络

标题 二进制兼容 源代码兼容
Cookie 路径处理符合 RFC 6265 ✔️
LocalEndPoint 在调用 SendToAsync 后更新 ✔️
MulticastOption.Group 不接受 null ✔️
流允许后续开始操作 ✔️
从 .NET 运行时中删除了 WinHttpHandler ✔️

SDK

标题 二进制兼容 源代码兼容
默认情况下导入的 Directory.Packages.props 文件 ✔️
当可执行项目引用不匹配的可执行文件时生成的错误 ✔️
FrameworkReference 替换为适用于 Windows SDK 的 WindowsSdkPackageVersion ✔️
未定义NETCOREAPP3_1预处理器符号 ✔️
OutputType 设置为 WinExe ✔️
PublishDepsFilePath 行为的变化 ✔️
TargetFramework 从 netcoreapp 更改为 net ✔️
WinForms 和 WPF 应用使用 Microsoft.NET.Sdk ✔️

安全性

标题 二进制兼容 源代码兼容
代码访问安全 API 已过时 ✔️
PrincipalPermissionAttribute 已过时 ✔️
UTF-7 代码路径已过时 ✔️

序列化

标题 二进制兼容 源代码兼容
BinaryFormatter.Deserialize 重新包装异常 ✔️
JsonSerializer.Deserialize 需要单字符字符串 ✔️
ASP.NET Core 应用程序将带引号的数字反序列化 ✔️
JsonSerializer.Serialize 引发 ArgumentNullException ✔️
不用于反序列化的非公共无参数构造函数 ✔️
序列化键值对时可以采用选项 ✔️

Windows 窗体

标题 二进制兼容 源代码兼容
本机代码无法访问 Windows 窗体对象 ✔️
OutputType 设置为 WinExe ✔️
DataGridView 不会重置自定义字体 ✔️
方法引发 ArgumentException ✔️
方法抛出 ArgumentNullException ✔️
属性引发 ArgumentOutOfRangeException ✔️
TextFormatFlags.ModifyString 已过时 ✔️
DataGridView API 引发 InvalidOperationException ✔️
WinForms 应用使用 Microsoft.NET.Sdk ✔️
已删除状态栏控件 ✔️

WPF

标题 二进制兼容 源代码兼容
OutputType 设置为 WinExe ✔️
WPF 应用使用 Microsoft.NET.Sdk ✔️

另请参阅