NETCOREAPP3_1 symbol preprocesoru není definován při cílení na .NET 5.
V .NET 5 RC2 a novějších verzích už projekty nedefinují symboly preprocesoru pro starší verze, ale pouze pro verzi, na kterou cílí. Jedná se o stejné chování jako .NET Core 1.0 – 3.1.
Zavedená verze
5.0 RC2
Změna popisu
V .NET 5 Preview 7 až RC1 jsou projekty, které cílí net5.0
na NETCOREAPP3_1
symboly preprocesoru i NET5_0
symboly preprocesoru. Záměrem této změny chování bylo, že počínaje rozhraním .NET 5 by symboly podmíněné kompilace byly kumulativní.
V .NET 5 RC2 a novějších projektech definují pouze symboly pro monikers cílové architektury (TFM), které cílí, a ne pro žádné starší verze.
Důvod změny
Změna z verze Preview 7 se vrátila z důvodu zpětné vazby zákazníků. Definování symbolů pro starší verze překvapilo a zmatené zákazníky a někteří předpokládali, že se jednalo o chybu v kompilátoru jazyka C#.
Doporučená akce
Ujistěte se, že vaše #if
logika nepředpokládá, že je definována, NETCOREAPP3_1
když projekt cílí net5.0
nebo vyšší. Místo toho předpokládejme, že je NETCOREAPP3_1
definován pouze tehdy, když projekt explicitně cílí netcoreapp3.1
.
Pokud například váš projekt používá vícestranné cíle pro .NET Core 2.1 a .NET Core 3.1 a voláte rozhraní API, která byla zavedena v .NET Core 3.1, měla by logika #if
vypadat takto:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
Ovlivněná rozhraní API
–