Freigeben über


Das Präprozessorsymbol NETCOREAPP3_1 ist nicht definiert, wenn auf .NET 5 abgezielt wird.

In .NET 5 RC2 und höheren Versionen definieren Projekte keine Präprozessorsymbole für frühere Versionen mehr, sondern nur für die Version, auf die sie abzielen. Dies ist das gleiche Verhalten wie .NET Core 1.0 - 3.1.

Eingeführte Version

5.0 RC2

Änderungsbeschreibung

In .NET 5 Preview 7 bis RC1 definieren Projekte, die auf net5.0 abzielen, sowohl NETCOREAPP3_1- als auch NET5_0-Präprozessorsymbole. Die Absicht hinter dieser Verhaltensänderung bestand darin, dass ab .NET 5 bedingte Kompilierungssymbole kumulativ wären.

In .NET 5 RC2 und höher definieren Projekte nur Symbole für die Zielframework-Moniker (TFM), auf die es ausgerichtet ist und nicht für frühere Versionen.

Grund für Änderung

Die Änderung aus Vorschau 7 wurde aufgrund des Kundenfeedbacks zurückgenommen. Das Definieren von Symbolen für frühere Versionen überraschte und verwirrte Kunden, und einige davon ausgegangen, dass es sich um einen Fehler im C#-Compiler handelte.

Stellen Sie sicher, dass Ihre #if-Logik nicht annimmt, dass NETCOREAPP3_1 definiert ist, wenn das Projekt auf net5.0 oder höher abzielt. Gehen Sie stattdessen davon aus, dass NETCOREAPP3_1 nur definiert ist, wenn das Projekt gezielt auf netcoreapp3.1 ausgerichtet ist.

Wenn Ihr Projekt beispielsweise Multitargeting für .NET Core 2.1 und .NET Core 3.1 durchführt und Sie APIs verwenden, die in .NET Core 3.1 eingeführt wurden, sollte Ihre #if-Logik wie folgt aussehen:

#if NETCOREAPP2_1 || NETCOREAPP3_0
    // Fallback behavior for old versions.
#elif NETCOREAPP
    // Behavior for .NET Core 3.1 and later.
#endif

Betroffene APIs

Nicht verfügbar