目標為 .NET 5 時,不會定義 NETCOREAPP3_1 前置處理器符號
在 .NET 5 RC2 和更新版本中,專案不會再針對舊版定義前置處理器符號,而只會針對其目標版本定義。 這與 .NET Core 1.0 - 3.1 的行為相同。
導入的版本
5.0 RC2
變更描述
在 .NET 5 Preview 7 到 RC1 中,以 net5.0
為目標的專案會定義 NETCOREAPP3_1
和 NET5_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