Environment.OSVersion retorna a versão correta do sistema operacional

Environment.OSVersion retorna a versão real do sistema operacional (SO) em vez de, por exemplo, o sistema operacional selecionado para compatibilidade de aplicativos.

Alterar a descrição

Em versões anteriores do .NET, Environment.OSVersion retorna uma versão do sistema operacional que pode estar incorreta quando um aplicativo é executado no modo de compatibilidade do Windows. Para obter mais informações, consulte Observações sobre a função GetVersionExA. No macOS, Environment.OSVersion retorna a versão subjacente do kernel Darwin.

A partir do .NET 5, Environment.OSVersion retorna a versão real do sistema operacional para Windows e macOS.

A tabela a seguir mostra a diferença no comportamento.

Versões anteriores do .NET .NET 5+
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

Razão para a alteração

Os usuários dessa propriedade esperam que ela retorne a versão real do sistema operacional. A maioria dos aplicativos .NET não especifica sua versão suportada no manifesto do aplicativo e, portanto, obtém a versão padrão suportada do host dotnet. Como resultado, o shim de compatibilidade raramente é significativo para o aplicativo que está sendo executado. Quando o Windows lança uma nova versão e um host dotnet mais antigo ainda está em uso, esses aplicativos podem obter uma versão incorreta do sistema operacional. Retornar a versão real está mais alinhado com as expectativas dos desenvolvedores em relação a essa API.

Com a introdução do OperatingSystem.IsWindowsVersionAtLeast, OperatingSystem.IsMacOSVersionAtLeast, e System.Runtime.Versioning.SupportedOSPlatformAttribute no .NET 5, Environment.OSVersion foi alterado para ser consistente para Windows e macOS.

Versão introduzida

5.0

Revise e teste qualquer código usado Environment.OSVersion para garantir que ele se comporte conforme desejado.

APIs afetadas