Environment.OSVersion restituisce la versione corretta del sistema operativo

Environment.OSVersion restituisce la versione effettiva del sistema operativo anziché, ad esempio, il sistema operativo selezionato per la compatibilità delle applicazioni.

Descrizione delle modifiche

Nelle versioni precedenti di .NET Environment.OSVersion restituisce una versione del sistema operativo che potrebbe non essere corretta quando un'applicazione viene eseguita in modalità di compatibilità di Windows. Per altre informazioni, vedere Osservazioni sulla funzione GetVersionExA. In macOS Environment.OSVersion restituisce la versione del kernel Darwin sottostante.

A partire da .NET 5, Environment.OSVersion restituisce la versione effettiva del sistema operativo per Windows e macOS.

Nella tabella seguente viene illustrata la differenza di comportamento.

Versioni precedenti di .NET .NET 5+
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

Motivo della modifica

Gli utenti di questa proprietà si aspettano che restituisca la versione effettiva del sistema operativo. La maggior parte delle app .NET non specifica la versione supportata nel manifesto dell'applicazione e quindi ottiene la versione supportata predefinita dall'host dotnet. Di conseguenza, lo shim di compatibilità è raramente significativo per l'app in esecuzione. Quando Windows rilascia una nuova versione e un host dotnet meno recente è ancora in uso, queste app potrebbero ottenere una versione errata del sistema operativo. La restituzione della versione effettiva è più in linea con le aspettative degli sviluppatori di questa API.

Con l'introduzione di OperatingSystem.IsWindowsVersionAtLeast, OperatingSystem.IsMacOSVersionAtLeast e System.Runtime.Versioning.SupportedOSPlatformAttribute in .NET 5, sono state apportate modifiche a Environment.OSVersion in modo che sia coerente per Windows e macOS.

Versione introdotta

5.0

Esaminare e testare il codice che usa Environment.OSVersion per assicurarsi che funzioni come desiderato.

API interessate