Environment.OSVersion retourne la version correcte du système d’exploitation

Environment.OSVersion retourne la version réelle du système d’exploitation, plutôt que, par exemple, celle sélectionnée pour la compatibilité des applications.

Description de la modification

Dans les versions .NET précédentes, Environment.OSVersion retourne une version du système d’exploitation qui peut être incorrecte lorsqu’une application s’exécute en mode de compatibilité Windows. Pour plus d’informations, consultez les remarques de fonction GetVersionExA. Sur macOS, Environment.OSVersion retourne la version sous-jacente du noyau Darwin.

À compter de .NET 5, Environment.OSVersion retourne la version réelle du système d’exploitation pour Windows et macOS.

Le tableau suivant montre la différence de comportement.

Versions précédentes de .NET .NET 5+
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

Raison de la modification

Les utilisateurs de cette propriété s’attendent à ce qu’elle retourne la version réelle du système d’exploitation. La plupart des applications .NET ne spécifient pas leur version prise en charge dans leur manifeste d’application et obtiennent donc la version prise en charge par défaut à partir de l’hôte dotnet. Par conséquent, le shim de compatibilité est rarement significatif pour l’application en cours d’exécution. Lorsque Windows publie une nouvelle version et qu’un hôte dotnet plus ancien est toujours utilisé, ces applications peuvent obtenir une version incorrecte du système d’exploitation. Le retour de la version réelle est plus inline avec les attentes des développeurs de cette API.

Avec l'introduction de OperatingSystem.IsWindowsVersionAtLeast, OperatingSystem.IsMacOSVersionAtLeast et System.Runtime.Versioning.SupportedOSPlatformAttribute dans .NET 5, Environment.OSVersion a été modifié afin d'assurer la cohérence entre Windows et macOS.

Version introduite

5,0

Passez en revue et testez tout code qui l’utilise Environment.OSVersion pour vous assurer qu’il se comporte comme vous le souhaitez.

API affectées