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