如何确定.NETCore 应用程序运行在哪个操作系统上? 在过去我可以使用 Environment.OSVersion。
Environment.OSVersion
当前确定我的应用程序是在 Mac 还是 Windows 上运行的方法是什么?
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows OSPlatform.OSX OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(OSPlatform.Windows);
感谢 Oleksii Vynnychenko 的评论
您可以使用以下命令获取操作系统名称和版本作为字符串
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;
例如,osNameAndVersion就是 Microsoft Windows 10.0.10586
osNameAndVersion
Microsoft Windows 10.0.10586
System.Environment.OSVersion.Platform可以完全使用.NET Framework 和 Mono,但是:
System.Environment.OSVersion.Platform
System.Runtime.InteropServices.RuntimeInformation可以在.NET Core 中使用,但是:
System.Runtime.InteropServices.RuntimeInformation
您可以调用特定于平台的非托管函数,如 uname(),但是:
uname()
因此,我建议的解决方案(见下面的代码)乍看起来可能有点傻,但是:
string windir = Environment.GetEnvironmentVariable("windir"); if (!string.IsNullOrEmpty(windir) && windir.Contains(@"\") && Directory.Exists(windir)) { _isWindows = true; } else if (File.Exists(@"/proc/sys/kernel/ostype")) { string osType = File.ReadAllText(@"/proc/sys/kernel/ostype"); if (osType.StartsWith("Linux", StringComparison.OrdinalIgnoreCase)) { // Note: Android gets here too _isLinux = true; } else { throw new UnsupportedPlatformException(osType); } } else if (File.Exists(@"/System/Library/CoreServices/SystemVersion.plist")) { // Note: iOS gets here too _isMacOsX = true; } else { throw new UnsupportedPlatformException(); }
检查 System.OperatingSystem类,它对每个操作系统都有静态方法,例如 IsMacOS()、 IsWindows()、 IsIOS()等等。这些方法从以下开始可用。NET 5.
System.OperatingSystem
IsMacOS()
IsWindows()
IsIOS()