NETCOREAPP3_1 förprocessorsymbol definieras inte när du riktar in dig på .NET 5
I .NET 5 RC2 och senare versioner definierar projekt inte längre preprocessorsymboler för tidigare versioner, utan bara för den version som de riktar in sig på. Det här är samma beteende som .NET Core 1.0 – 3.1.
Version introducerad
5.0 RC2
Ändra beskrivning
I .NET 5 preview 7 till RC1 definierar projekt som mål net5.0
både NETCOREAPP3_1
symboler och NET5_0
preprocessorsymboler. Avsikten bakom den här beteendeändringen var att från och med .NET 5 skulle villkorsstyrda kompileringssymboler vara kumulativa.
I .NET 5 RC2 och senare definierar projekt endast symboler för målramverksmonikers (TFM) som det riktar sig mot och inte för tidigare versioner.
Orsak till ändringen
Ändringen från förhandsversion 7 återställdes på grund av kundfeedback. Att definiera symboler för tidigare versioner överraskade och förvirrade kunder, och vissa antog att det var en bugg i C#-kompilatorn.
Rekommenderad åtgärd
Kontrollera att logiken #if
inte förutsätter att NETCOREAPP3_1
den definieras när projektet är mål net5.0
eller högre. Anta i stället att det NETCOREAPP3_1
bara definieras när projektet uttryckligen riktar in sig på netcoreapp3.1
.
Om dina projekt multitargets för .NET Core 2.1 och .NET Core 3.1 och du anropar API:er som introducerades i .NET Core 3.1 bör logiken #if
se ut så här:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
Berörda API:er
Ej tillämpligt