目標為 .NET 5 時,不會定義 NETCOREAPP3_1 前置處理器符號

在 .NET 5 RC2 和更新版本中,專案不會再針對舊版定義前置處理器符號,而只會針對其目標版本定義。 這與 .NET Core 1.0 - 3.1 的行為相同。

導入的版本

5.0 RC2

變更描述

在 .NET 5 Preview 7 到 RC1 中,以 net5.0 為目標的專案會定義 NETCOREAPP3_1NET5_0 前置處理器符號。 此行為變更背後的意圖是從 .NET 5 開始,條件式編譯符號將是累計的

在 .NET 5 RC2 和更新版本中,專案只會針對其視為目標的目標 Framework Monikers (TFM) (而不是針對任何舊版) 定義其符號。

變更原因

預覽版 7 的變更已因客戶意見反應而還原。 定義舊有版本的符號會使客戶覺得意外和混淆,而有些客戶會認為這是 C# 編譯器中的錯誤 (bug)。

請確定您的 #if 邏輯不會假設 NETCOREAPP3_1 會在專案以 net5.0 或更新版本為目標時進行定義。 而是假設只有在專案明確以 netcoreapp3.1 為目標時才定義 NETCOREAPP3_1

例如,如果專案有多個 .NET Core 2.1 和 .NET Core 3.1 的目標,而且您呼叫 .NET Core 3.1 中引進的 API,則 #if 邏輯應該會如下所示:

#if NETCOREAPP2_1 || NETCOREAPP3_0
    // Fallback behavior for old versions.
#elif NETCOREAPP
    // Behavior for .NET Core 3.1 and later.
#endif

受影響的 API

N/A