Как определить, на какой операционной системе работает мое сетевое приложение .net?
В прошлом я мог использовать Environment.OSVersion
.
Каков текущий способ определить, работает ли мое приложение на Mac или Windows.
Как определить, на какой операционной системе работает мое сетевое приложение .net?
В прошлом я мог использовать Environment.OSVersion
.
Каков текущий способ определить, работает ли мое приложение на Mac или Windows.
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation
.IsOSPlatform(OSPlatform.Windows)
Благодаря комментарию Алексея Винниченко
Вы можете получить имя и версию операционной системы в виде строки, используя
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription
например. osNameAndVersion
будет Microsoft Windows 10.0.10586
System.Environment.OSVersion.Platform
можно использовать в полной версии .NET Framework и Mono, но:
System.Runtime.InteropServices.RuntimeInformation
может использоваться в .NET Core, но:
Вы могли бы вызывать специальные неуправляемые функции платформы, такие как 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();
}