Sdílet prostřednictvím


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#.

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