How can I determine which operating system my .NET Core app is running on?
In the past I could use Environment.OSVersion
.
What is the current way to determine whether my app is running on Mac or Windows?
How can I determine which operating system my .NET Core app is running on?
In the past I could use Environment.OSVersion
.
What is the current way to determine whether my app is running on Mac or Windows?
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation
.IsOSPlatform(OSPlatform.Windows);
Thanks to the comment by Oleksii Vynnychenko
You can get the operating systems name and version as a string using
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;
E.g. osNameAndVersion
would be Microsoft Windows 10.0.10586
System.Environment.OSVersion.Platform
can be used in full .NET Framework and Mono but:
System.Runtime.InteropServices.RuntimeInformation
can be used in .NET Core but:
You could pinvoke platform specific unmanaged functions such as uname()
but:
So my suggested solution (see code bellow) may look sily at first but:
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();
}