.NET 8 的重大變更

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

本文會將每個重大變更分類為「二進位不相容」或「來源不相容」,或分類為「行為變更」

  • 二進位不相容 - 針對新的執行階段或元件執行時,現有的二進位檔可能會發生重大行為變更,例如載入或執行失敗,如果發生此情況,則需要重新編譯。

  • 來源不相容 - 使用新的 SDK 或元件重新編譯,或以新的執行階段為目標時,現有的原始程式碼可能需要來源變更才能順利編譯。

  • 行為變更 - 現有的程式碼和二進位檔在執行階段的行為可能不同。 如果不需要新的行為,則必須更新並重新編譯現有的程式碼。

ASP.NET Core

標題 變更類型
ConcurrencyLimiterMiddleware 已淘汰 來源不相容
已移除序列化的自訂轉換器 行為變更
ISystemClock 已淘汰 來源不相容
最小 API:IFormFile 參數需要防偽檢查 行為變更
速率限制中介軟體需要 AddRateLimiter 行為變更
安全性權杖事件會傳回 JsonWebToken 行為變更
TrimMode 預設為針對 Web SDK 專案已滿 來源不相容

容器

標題 變更類型
已從 Alpine 映像移除「ca-certificates」套件 二進位不相容
已升級至 Debian 12 的 Debian 容器映像 二進位不相容/行為變更
預設 ASP.NET Core 連接埠已變更為 8080 行為變更
已從 Alpine 和 Debian 映像移除 Kerberos 套件 二進位不相容
已從 Alpine 映像移除「libintl」套件 行為變更
多平台容器標籤僅限 Linux 行為變更
Linux 映像中的新「應用程式」使用者 行為變更

Core .NET 程式庫

標題 變更類型
Null 時的活動作業名稱 行為變更
AnonymousPipeServerStream.Dispose 行為 行為變更
使用自訂診斷識別碼的 API 淘汰 來源不相容
Unix 檔案路徑中的反斜線對應 行為變更
Base64.DecodeFromUtf8 方法會忽略空格 行為變更
已移除布林值支援的列舉類型支援 行為變更
磁碟機的目前目錄路徑列舉 行為變更
Enumerable.Sum 會針對某些輸入擲回新的 OverflowException 行為變更
關閉管道時 FileStream 寫入 行為變更
FindSystemTimeZoneById 不會傳回新的物件 行為變更
Gc.GetGeneration 可能會傳回 Int32.MaxValue 行為變更
Unix 上的 GetFolderPath 行為 行為變更
GetSystemVersion 不再傳回 ImageRuntimeVersion 行為變更
ITypeDescriptorContext 的可為 Null 註釋 來源不相容
舊版 Console.ReadKey 已移除 行為變更
方法建立器會產生參數,並將 HasDefaultValue 設定為 false 行為變更
UseShellExecute 為 false 時接受 ProcessStartInfo.WindowStyle 行為變更
RuntimeIdentifier 會傳回建立執行階段所在的平台 行為變更
Type.GetType 會針對所有無效的元素類型擲回例外狀況 行為變更

密碼編譯

標題 變更類型 推出的版本
macOS 上的 AesGcm 驗證標記大小 行為變更 Preview 1
RSA.EncryptValue 和 RSA.DecryptValue 已淘汰 來源不相容 Preview 1

部署

標題 變更類型
主機會決定 RID 特定資產 二進位不相容/行為變更
.NET 監視器只包含 distroless 映像 行為變更
StripSymbols 預設為 true 行為變更

Entity Framework Core

EF Core 8 中的中斷性變更

擴充

標題 變更類型
ActivatorUtilities.CreateInstance 的行為一致 行為變更
ActivatorUtilities.CreateInstance 需要非 Null 提供者 行為變更
針對不符的值擲回 ConfigurationBinder 行為變更
ConfigurationManager 套件不再參考 System.Security.Permissions 來源不相容
DirectoryServices 套件不再參考 System.Security.Permissions 來源不相容
組態繫結器新增至字典的空白索引鍵 行為變更
HostApplicationBuilder ctor 遵守的 HostApplicationBuilderSettings.Args 行為變更
ManagementDateTimeConverter.ToDateTime 會傳回當地時間 行為變更
System.Formats.Cbor DateTimeOffset 格式變更 行為變更

全球化

標題 變更類型
日期和時間轉換器接受文化特性引數 行為變更
TwoDigitYearMax 預設值為 2049 行為變更

Interop

標題 變更類型
CreateObjectFlags.Unwrap 只在目標執行個體上取消換行 行為變更
自訂封送處理器需要其他成員 來源不相容
已移除 IDispatchImplAttribute API 二進位不相容
已移除 JSFunctionBinding 隱含公用預設建構函式 二進位不相容
SafeHandle 類型必須具有公用建構函式 來源不相容

網路

標題 變更類型
SendFile 會針對無連線通訊端擲回 NotSupportedException 行為變更

反射

標題 變更類型
IntPtr 不再用於函式指標型別 行為變更

SDK

標題 變更類型
CLI 主控台輸出使用 UTF-8 行為變更/來源和二進位不相容
完成之後,主控台編碼不是 UTF-8 行為變更/二進位不相容
容器預設為使用「latest」標籤 行為變更
'dotnet pack' 使用 Release 設定 行為變更/來源不相容
'dotnet publish' 使用 Release 組態 行為變更/來源不相容
-getItem、-getProperty 和 -getTargetResult 的重複輸出 行為變更
不再新增 System.Net.Http 的隱含 using 行為變更/來源不相容
MSBuild 自訂衍生的建置事件已被取代 行為變更
MSBuild 尊重 DOTNET_CLI_UI_LANGUAGE 行為變更
執行階段特定應用程式未獨立 來源/二進位不相容
--arch 選項並不代表獨立 行為變更
「dotnet restore」會產生安全性弱點警告 行為變更
SDK 使用較小的 RID 圖形 行為變更/來源不相容
.NET SDK 中包含的 Source Link 來源不相容
修剪可能無法與 .NET Standard 或 .NET Framework 搭配使用 行為變更
預設不會針對 .NET 工具安裝未列出的套件 行為變更
在外部組建中匯入的 .user 檔案 行為變更
.NET 8 SDK 的版本需求 來源不相容

序列化

標題 變更類型
大部分專案的 BinaryFormatter 已停用 行為變更
PublishedTrimmed 專案失敗以反映為基礎的序列化 行為變更
以反映為基礎的還原序列化程式會積極地解析中繼資料 行為變更

Windows Forms \(英文\)

標題 變更類型
錨點版面配置變更 行為變更
在 PictureBox 中載入遠端映像之前先檢查憑證 行為變更
DefaultValueAttribute 已從某些屬性移除 行為變更
ExceptionCollection ctor 擲回 ArgumentException 行為變更
根據 AutoScaleMode 調整表單大小 行為變更
ImageList.ColorDepth 預設值為 Depth32Bit 行為變更
System.Windows.Extensions 不會參考 System.Drawing.Common 來源不相容
TableLayoutStyleCollection 會擲回 ArgumentException 行為變更
最上層表單的大小下限和大小上限為 DPI 行為變更
WFDEV002 淘汰現在是錯誤 來源不相容

另請參閱