Environment.OSVersion retourne la version appropriée du système d’exploitation

Environment.OSVersion retourne la version réelle du système d’exploitation au lieu, par exemple, du système d’exploitation sélectionné pour la compatibilité de l’application.

Description de la modification

Dans les versions précédentes de .NET, 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 Remarques sur la fonction GetVersionExA. Sur macOS, Environment.OSVersion retourne la version du noyau Darwin sous-jacente.

À partir 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 .NET précédentes .NET 5+
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

Raison du changement

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 en cours d’utilisation, ces applications peuvent obtenir une version de système d’exploitation incorrecte. Le retour de la version réelle est plus conforme aux attentes des développeurs à l’égard de cette API.

Avec l’introduction de OperatingSystem.IsWindowsVersionAtLeast, OperatingSystem.IsMacOSVersionAtLeast et System.Runtime.Versioning.SupportedOSPlatformAttribute dans .NET 5, Environment.OSVersion a été modifié pour être cohérent pour Windows et macOS.

Version introduite

5,0

Consultez et testez tout code qui utilise Environment.OSVersion pour vérifier qu’il se comporte comme souhaité.

API affectées