面向 .NET 5 时,未定义 NETCOREAPP3_1 预处理器符号

在 .NET 5 RC2 及更高版本中,项目不再为早期版本定义预处理器符号,而仅适用于它们所面向的版本。 这与 .NET Core 1.0 - 3.1 的行为相同。

已引入的版本

5.0 RC2

更改描述

面向 net5.0 的项目在 .NET 5 预览版 7 到 RC1 中定义了 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