如果要将应用迁移到 .NET 5,此处列出的重大更改可能会影响你。 更改按技术领域分组,例如 ASP.NET 核心或加密。
本文指出每个中断性变更是二进制兼容还是源兼容:
- 二进制兼容 - 现有二进制文件将在不重新编译的情况下成功加载和执行,并且运行时行为不会更改。
- 源代码兼容 - 当面向新运行时或使用新的 SDK 或组件时,源代码将成功编译,而不会发生更改。
ASP.NET Core
代码分析
标题 | 二进制兼容 | 源代码兼容 |
---|---|---|
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 (实体框架核心)
全球化
标题 | 二进制兼容 | 与原代码兼容 |
---|---|---|
在 Windows 上使用 ICU 库 | ❌ | ✔️ |
StringInfo 和 TextElementEnumerator 符合 UAX29 | ❌ | ✔️ |
拉丁语-1 字符的 Unicode 类别已更改 | ✔️ | ❌ |
TextInfo.ListSeparator 值已更改 | ✔️ | ❌ |
Interop
标题 | 二进制兼容 | 与源代码兼容 |
---|---|---|
已删除对 WinRT 的支持 | ❌ | ✔️ |
将 RCW 强制转换为 InterfaceIsIInspectable 会引发异常 | ❌ | ✔️ |
不在非 Windows 平台上探测 A/W 后缀 | ❌ | ✔️ |
网络
标题 | 二进制兼容 | 源代码兼容 |
---|---|---|
Cookie 路径处理符合 RFC 6265 | ✔️ | ❌ |
LocalEndPoint 在调用 SendToAsync 后更新 | ✔️ | ❌ |
MulticastOption.Group 不接受 null | ✔️ | ❌ |
流允许后续开始操作 | ❌ | ✔️ |
从 .NET 运行时中删除了 WinHttpHandler | ❌ | ✔️ |
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(Windows Presentation Foundation)
标题 | 二进制兼容 | 源代码兼容 |
---|---|---|
OutputType 设置为 WinExe | ❌ | ✔️ |
WPF 应用使用 Microsoft.NET.Sdk | ❌ | ✔️ |