共用方式為


目標為 .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 和之後的版本中,專案只會為其目標架構標記符號(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