Partager via


Le symbole de préprocesseur NETCOREAPP3_1 n'est pas défini lorsqu'on cible .NET 5.

Dans .NET 5 RC2 et versions ultérieures, les projets ne définissent plus de symboles de préprocesseur pour les versions antérieures, mais uniquement pour la version qu’ils ciblent. Il s’agit du même comportement que .NET Core 1.0 - 3.1.

Version introduite

5.0 RC2

Description de la modification

Dans .NET 5 preview 7 jusqu'à RC1, les projets qui ciblent net5.0 définissent les symboles de préprocesseur NETCOREAPP3_1 et NET5_0. L’intention derrière ce changement de comportement était que à partir de .NET 5, les symboles de compilation conditionnelle seraient cumulatifs.

Dans .NET 5 RC2 et versions ultérieures, les projets définissent uniquement des symboles pour les monikers de framework cible (TFM) qu’il cible et non pour les versions antérieures.

Raison de la modification

La modification de la préversion 7 a été annulée en raison des commentaires des clients. Définir des symboles pour les versions antérieures a surpris et confus les clients, et certains ont supposé qu’il s’agissait d’un bogue dans le compilateur C#.

Assurez-vous que votre logique #if ne suppose pas que NETCOREAPP3_1 est défini lorsque le projet cible net5.0 ou plus. Au lieu de cela, supposons que NETCOREAPP3_1 n'est défini que lorsque le projet cible explicitement netcoreapp3.1.

Par exemple, si votre projet cible plusieurs versions, comme .NET Core 2.1 et .NET Core 3.1, et que vous appelez des API introduites dans .NET Core 3.1, votre logique doit se présenter comme suit :

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

API affectées

N/A