Символ препроцессора NETCOREAPP3_1 не определен при ориентации на .NET 5
В .NET 5 RC2 и более поздних версиях в проектах больше не определяются символы препроцессора для более ранних версий. Определяются символы препроцессора только для целевой версии. Это то же самое поведение, что и в .NET Core 1.0–3.1.
Представленные версии
5.0 RC2
Описание изменения
В версиях .NET 5 с предварительной версии 7 до RC1 в проектах, предназначенных для net5.0
, определяются символы препроцессора NETCOREAPP3_1
и NET5_0
. Цель этого изменения поведения заключается в том, чтобы начиная с .NET 5 символы условной компиляции были накопительными.
В .NET 5 RC2 и более поздних версиях в проектах определяются только символы для моникеров целевой платформы (TFM), для которой она предназначена, а не для предыдущих версий.
Причина изменения
Изменение из предварительной версии 7 было отменено из-за отзывов пользователей. Определение символов для более ранних версий удивило и запутало пользователей, и некоторые предположили, что это ошибка в компиляторе C#.
Рекомендуемое действие
Убедитесь, что в логике #if
не предполагается определение NETCOREAPP3_1
, если проект предназначен для net5.0
или более поздней версии. Вместо этого сделайте так, чтобы NETCOREAPP3_1
определялся только в том случае, если проект явно предназначен для netcoreapp3.1
.
Например, если проект предназначен для нескольких платформ (.NET Core 2.1 и .NET Core 3.1) и вы вызываете API, которые появились в .NET Core 3.1, то логика #if
должна выглядеть следующим образом:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
Затронутые API
Н/Д