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

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

Descrição das alterações

Nas 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, confira Comentários sobre a função GetVersionExA. No macOS, Environment.OSVersion retorna a versão subjacente do kernel do Darwin.

Do .NET 5 em diante, Environment.OSVersion retorna a versão real do sistema operacional Windows e macOS.

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

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

Motivo da 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 a versão com suporte no manifesto do aplicativo e, portanto, obtém a versão com suporte padrão do host do dotnet. Como resultado, o shim de compatibilidade é pouco significativo para o aplicativo em execução. Quando o Windows lança uma nova versão e um host do dotnet mais antigo ainda está em uso, esses aplicativos podem obter uma versão incorreta do sistema operacional. O retorno da versão real está mais alinhado às expectativas dos desenvolvedores quanto a essa API.

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

Versão introduzida

5,0

Examine e teste os códigos que usam Environment.OSVersion para garantir que ele se comporte conforme o desejado.

APIs afetadas