Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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#.
Action recommandée
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