Das NETCOREAPP3_1-Präprozessorsymbol ist nicht definiert, wenn .NET 5 als Zielversion verwendet wird
In .NET 5 RC2 und höher definieren Projekte keine Präprozessorsymbole mehr für frühere Versionen, sondern nur für die Zielversion. Dieses Verhalten entspricht dem von .NET Core 1.0 bis .NET Core 3.1.
Eingeführt in Version
5.0 RC2
Änderungsbeschreibung
In .NET 5 Preview 7 bis .NET 5 RC1 definieren Projekte für net5.0
die Präprozessorsymbole NETCOREAPP3_1
und NET5_0
. Durch diesen Behavior Change sind Symbole für die bedingte Kompilierung ab .NET 5 kumulativ.
Ab .NET 5 RC2 definieren Projekte nur Symbole für die Zielframeworkmoniker, nicht jedoch für frühere Versionen.
Grund für die Änderung
Die Änderung aus Preview 7 wurde aufgrund von Kundenfeedback zurückgenommen. Kunden waren überrascht und verwirrt, dass sie Symbole für frühere Versionen definieren mussten, und einige hielten dies für einen Fehler im C#-Compiler.
Empfohlene Maßnahme
Stellen Sie sicher, dass Ihre #if
-Logik nicht von einer vorhandenen NETCOREAPP3_1
-Definition ausgeht, wenn das Projekt auf net5.0
oder höher ausgerichtet ist. Es sollte stattdessen davon ausgegangen werden, dass NETCOREAPP3_1
nur definiert ist, wenn das Projekt explizit auf netcoreapp3.1
ausgerichtet ist.
Wenn Ihr Projekt beispielsweise .NET Core 2.1 und .NET Core 3.1 als Zielversionen verwendet und Sie APIs aufrufen, die in .NET Core 3.1 eingeführt wurden, sollte Ihre #if
-Logik folgendermaßen aussehen:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
Betroffene APIs
–