.NET 5 的重大變更

如果您要將應用程式移轉至 .NET 5,此處列出的重大變更可能會影響您。 變更會依技術區域分組,例如 ASP.NET Core 或密碼編譯。

本文指出每個中斷性變更是 二進制相容 或 原始碼相容:

  • 二進位相容 - 現有的二進位檔能在不重新編譯的情況下順利載入並執行,執行時行為也不會改變。
  • 來源相容 - 原始碼會在目標為新的運行時間或使用新的 SDK 或元件時順利編譯,而不會變更。

ASP.NET Core

詳見 ASP.NET Core 5 中的重大變更。

程式碼分析

標題 二進位相容 來源相容
CA1416 警告 ✔️ ❌
CA1417 警告 ✔️ ❌
CA1831 警告 ✔️ ❌
CA2013 警告 ✔️ ❌
CA2014 警告 ✔️ ❌
CA2015 警告 ✔️ ❌
CA2200 警告 ✔️ ❌
CA2247 警告 ✔️ ❌

Core .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 過時 ✔️ ❌
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 的行為變更 ✔️ ❌
向量<T> 引發 NotSupportedException ❌ ✔️

密碼學

標題 二進位相容 來源相容
瀏覽器不支援密碼編譯 API ❌ ✔️
Cryptography.Oid 僅供初始化 ✔️ ❌
Linux 上的預設 TLS 加密套件 ❌ ✔️
密碼編譯抽象概念上的 Create() 多載已經過時 ✔️ ❌
已變更預設FeedbackSize值 ✔️ ❌

Entity Framework Core

請參閱 EF Core 5.0 的重大變更。

全球化

標題 二進位相容 來源相容
在 Windows 上使用 ICU 連結庫 ❌ ✔️
StringInfo 和 TextElementEnumerator 符合 UAX29 標準 ❌ ✔️
Latin-1 字元的 Unicode 類別已變更 ✔️ ❌
TextInfo.ListSeparator 值已變更 ✔️ ❌

Interop

標題 二進位相容 來源相容
已移除 WinRT 的支援 ❌ ✔️
將 RCW 轉換成 InterfaceIsIInspectable 時會發生例外狀況 ❌ ✔️
非 Windows 平台無 A/W 後綴檢測 ❌ ✔️

網路

標題 二進位相容 來源相容
Cookie 路徑處理符合 RFC 6265 ✔️ ❌
LocalEndPoint 會在呼叫 SendToAsync 之後更新 ✔️ ❌
MulticastOption.Group 不接受 null ✔️ ❌
串流允許連續的 Begin 作業 ❌ ✔️
從 .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 Forms

標題 二進位相容 來源相容
本機程式碼無法存取 Windows Forms 物件 ✔️ ❌
OutputType 設定為 WinExe ❌ ✔️
DataGridView 不會重設自定義字型 ✔️ ❌
方法會擲回ArgumentException ✔️ ❌
方法會擲回 ArgumentNullException ✔️ ❌
屬性會擲回 ArgumentOutOfRangeException ✔️ ❌
TextFormatFlags.ModifyString 已過時 ✔️ ❌
DataGridView API 擲回 InvalidOperationException ✔️ ❌
WinForms 應用程式使用 Microsoft.NET.Sdk ❌ ✔️
已移除狀態列控制件 ✔️ ❌

WPF

標題 二進位相容 來源相容
OutputType 設定為 WinExe ❌ ✔️
WPF 應用程式使用 Microsoft.NET.Sdk ❌ ✔️

另請參閱