Dela via


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.

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