Environment.OSVersion 傳回正確的作業系統版本

Environment.OSVersion 傳回作業系統的實際版本,而非為了應用程式相容性選取的 OS 等選項。

變更描述

在舊版 .NET 中,當應用程式在 Windows 相容性模式下執行時,Environment.OSVersion 會傳回可能不正確的 OS 版本。 如需詳細資訊,請參閱 GetVersionExA function 備註。 在 macOS 上,Environment.OSVersion 會傳回基底 Darwin 核心版本。

從 .NET 5 開始,Environment.OSVersion 會為 Windows 和 macOS 傳回作業系統的實際版本。

下表顯示行為的差異。

舊版 .NET .NET 5+
Windows 6.2.9200.0 10.0.19042.0
macOS 19.6.0.0 10.15.7

變更原因

這個屬性的使用者預期它會傳回作業系統的實際版本。 大多數 .NET 應用程式都不會在其應用程式資訊清單中指定支援的版本,因此會從 dotnet 主機取得預設的支援版本。 因此,對於正在執行的應用程式來說,相容性填充碼很少具有意義。 當 Windows 發佈新版本而舊版 dotnet 主機仍在使用中時,這些應用程式可能會取得錯誤的 OS 版本。 傳回實際版本更貼近開發人員對此 API 的預期。

隨著 .NET 5 引進 OperatingSystem.IsWindowsVersionAtLeastOperatingSystem.IsMacOSVersionAtLeastSystem.Runtime.Versioning.SupportedOSPlatformAttributeEnvironment.OSVersion 已變更為針對 Windows 和 macOS 有一致的行為。

導入的版本

5.0

請檢閱和測試使用 Environment.OSVersion 的所有程式碼,以確保其行為符合預期。

受影響的 API