Як я можу визначити, на якій операційній системі працює мій додаток .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();
}