Bagaimana cara menentukan sistem operasi mana yang menjalankan aplikasi .NET Core saya? Di masa lalu saya bisa menggunakan Environment.OSVersion
.
Apa cara saat ini untuk menentukan apakah aplikasi saya berjalan di Mac atau Windows?
Bagaimana cara menentukan sistem operasi mana yang menjalankan aplikasi .NET Core saya? Di masa lalu saya bisa menggunakan Environment.OSVersion
.
Apa cara saat ini untuk menentukan apakah aplikasi saya berjalan di Mac atau Windows?
Jawaban:
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation
.IsOSPlatform(OSPlatform.Windows);
Terima kasih atas komentar Oleksii Vynnychenko
Anda bisa mendapatkan nama dan versi sistem operasi sebagai string menggunakan
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;
Misalnya osNameAndVersion
akanMicrosoft Windows 10.0.10586
System.Runtime.InteropServices.RuntimeInformation.OSDescription
- mengembalikan deskripsi OS dengan versi, dll.
System.Environment.OSVersion.Platform
untuk konsistensi?
IsOSPlatform(OSPlatform.Create("FreeBSD"))
apakah mereka didukung sekarang atau mungkin ditambahkan di masa mendatang. Namun, tidak terlalu jelas pendekatan apa yang aman untuk string apa yang akan diteruskan (misalnya, apakah kasus penting, atau apakah "bsd"
cocok dengan keduanya "FreeBSD"
dan "NetBSD"
?). Lihat diskusi tentang fitur ini di sini .
System.Environment.OSVersion.Platform
dapat digunakan secara penuh .NET Framework dan Mono tetapi:
System.Runtime.InteropServices.RuntimeInformation
dapat digunakan di .NET Core tetapi:
Anda dapat melakukan pinvoke fungsi tidak terkelola khusus platform seperti uname()
tetapi:
Jadi solusi yang saya sarankan (lihat kode di bawah) mungkin terlihat konyol pada awalnya tetapi:
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();
}