.NET 5 中的重大變更

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

本文會表示各項中斷性變更為二進位相容來源相容

  • 二進位相容 - 現有的二進位檔會在不重新編譯的情況下成功載入和執行,而且執行階段行為不會變更。
  • 來源相容 - 以新執行階段為目標或使用新的 SDK 或元件時,原始程式碼會成功編譯且不會變更。

ASP.NET Core

標題 二進位相容 來源相容
ASP.NET Core 應用程式還原序列化加上引號的數字 ✔️
AzureAD.UI 與 AzureADB2C.UI API 已過時 ✔️
BinaryFormatter 序列化方法已過時 ✔️
端點路由中的資源是 HttpContext ✔️
已移除前置詞為 Microsoft 的 Azure 整合套件 ✔️
Blazor: Blazor 應用程式中的路由優先順序邏輯已變更 ✔️
Blazor:已更新瀏覽器支援 ✔️ ✔️
Blazor: 編譯器已修剪不重要的空白字元 ✔️
Blazor:JSObjectReference 與 JSInProcessObjectReference 類型為內部 ✔️
Blazor:NuGet 套件的目標 Framework 已變更 ✔️
Blazor:ProtectedBrowserStorage 功能已移至共用架構 ✔️
Blazor:RenderTreeFrame 唯讀公用欄位現在是屬性 ✔️
Blazor:已更新靜態 Web 資產的驗證邏輯 ✔️
瀏覽器不支援密碼編譯 API ✔️
延伸模組:套件參考變更 ✔️
Kestrel 與 IIS BadHttpRequestException 類型已過時 ✔️
IHttpClientFactory 記錄整數狀態碼所建立的 HttpClient 執行個體 ✔️
HttpSys:用戶端憑證重新交涉預設已停用 ✔️
IIS:UrlRewrite 中介軟體查詢字串已保留 ✔️
Kestrel: 預設會偵測到設定變更 ✔️
Kestrel:預設支援的 TLS 通訊協定版本已變更 ✔️
Kestrel:在不相容的 Windows 版本上,TLS 上的 HTTP/2 已停用 ✔️ ✔️
Kestrel:Libuv 傳輸已標示為過時 ✔️
ConsoleLoggerOptions 上的已過時屬性 ✔️
已移除 ResourceManagerWithCultureStringLocalizer 類別與 WithCulture 介面成員 ✔️
已移除「Pubternal」API ✔️
已在要求當地語系化中介軟體中移除過時的函式 ✔️
中介軟體:資料庫錯誤頁面已標示為已過時 ✔️
例外狀況處理常式中介軟體擲回原始例外狀況 ✔️ ✔️
ObjectModelValidator 呼叫驗證的新多載 ✔️
Cookie 名稱編碼已移除 ✔️
已更新 IdentityModel NuGet 套件版本 ✔️
SignalR:MessagePack 中樞通訊協定選項類型已變更 ✔️
SignalR: MessagePack 中樞通訊協定已移動 ✔️
已移除 UseSignalR 與 UseConnections 方法 ✔️
CSV 內容類型已變更為與標準相容 ✔️

程式碼分析

標題 二進位相容 來源相容
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 的行為變更 ✔️
Vector<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 ✔️
呼叫 SendToAsync 之後,LocalEndPoint 會更新 ✔️
MulticastOption.Group 不接受 Null ✔️
串流允許後續的 Begin 作業 ✔️
已從 .NET 執行階段移除 WinHttpHandler ✔️

SDK

標題 二進位相容 來源相容
依預設匯入的 Directory.Packages.props 檔案 ✔️
可執行檔專案參考不相符可執行檔時產生的錯誤 ✔️
以 Windows SDK 的 WindowsSdkPackageVersion 取代的 FrameworkReference ✔️
未定義 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 ✔️

另請參閱