NETCOREAPP3_1 förprocessorns symbol definieras inte när man riktar in sig 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 lanserad

5.0 RC2

Ändra beskrivning

I .NET 5 preview 7 till RC1 riktar sig projekt mot net5.0 och definierar både NETCOREAPP3_1 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 de målramverksmonikers (TFM) som den riktar sig mot och inte för tidigare versioner.

Orsak till ändring

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

Se till att din #if-logik inte förutsätter att NETCOREAPP3_1 är definierad när projektet riktar sig mot 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 har flera måltargetar 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 för #if se ut på följande sätt:

#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

Inte tillgänglig