Environment.OSVersion devuelve la versión correcta del sistema operativo

Environment.OSVersion devuelve la versión real del sistema operativo en lugar de, por ejemplo, el sistema operativo seleccionado para la compatibilidad de aplicaciones.

Descripción del cambio

En versiones anteriores de .NET, Environment.OSVersion devuelve una versión del sistema operativo que puede ser incorrecta cuando una aplicación se ejecuta en modo de compatibilidad de Windows. Para más información, vea Notas de la función GetVersionExA. En macOS, Environment.OSVersion devuelve la versión subyacente del kernel de Darwin.

A partir de .NET 5, Environment.OSVersion devuelve la versión real del sistema operativo para Windows y macOS.

En la tabla siguiente se muestra la diferencia en el comportamiento.

Versiones anteriores de .NET .NET 5 y versiones posteriores
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

Motivo del cambio

Los usuarios de esta propiedad esperan que devuelva la versión real del sistema operativo. La mayoría de las aplicaciones .NET no especifican su versión compatible en el manifiesto de aplicación y, por tanto, obtienen la versión admitida predeterminada del host dotnet. Como resultado, la corrección de compatibilidad no suele ser significativa para la aplicación que se está ejecutando. Cuando Windows lanza una nueva versión y todavía se está usando un host dotnet anterior, estas aplicaciones pueden obtener una versión incorrecta del sistema operativo. La devolución de la versión real está más alineada con las expectativas de los desarrolladores de esta API.

Con la introducción de OperatingSystem.IsWindowsVersionAtLeast, OperatingSystem.IsMacOSVersionAtLeast y System.Runtime.Versioning.SupportedOSPlatformAttribute en .NET 5, Environment.OSVersion ha cambiado a fin de ser coherente para Windows y macOS.

Versión introducida

5.0

Revise y pruebe cualquier código que use Environment.OSVersion para asegurarse de que se comporta como espera.

API afectadas