Как я могу определить, в какой операционной системе работает мое приложение .NET Core? Раньше я мог использовать Environment.OSVersion
.
Как в настоящее время определить, работает ли мое приложение на Mac или Windows?
Как я могу определить, в какой операционной системе работает мое приложение .NET Core? Раньше я мог использовать 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.Runtime.InteropServices.RuntimeInformation.OSDescription
- возвращает описание ОС с версией и т. Д.
System.Environment.OSVersion.Platform
единообразие?
IsOSPlatform(OSPlatform.Create("FreeBSD"))
проверить наличие других ОС, выяснив, поддерживаются ли они сейчас или могут быть добавлены в будущем. Однако не очень ясно, какой будет безопасный подход к тому, какие строки передать (например, имеет ли значение регистр или "bsd"
соответствует обоим "FreeBSD"
и "NetBSD"
?). См. Обсуждение этой функции здесь .
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();
}