Làm cách nào để xác định hệ điều hành mà ứng dụng .NET Core của tôi đang chạy? Trong quá khứ tôi có thể sử dụng Environment.OSVersion
.
Cách hiện tại để xác định xem ứng dụng của tôi đang chạy trên Mac hay Windows là gì?
Làm cách nào để xác định hệ điều hành mà ứng dụng .NET Core của tôi đang chạy? Trong quá khứ tôi có thể sử dụng Environment.OSVersion
.
Cách hiện tại để xác định xem ứng dụng của tôi đang chạy trên Mac hay Windows là gì?
Câu trả lời:
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation
.IsOSPlatform(OSPlatform.Windows);
Cảm ơn bình luận của Oleksii Vynnychenko
Bạn có thể lấy tên và phiên bản của hệ điều hành dưới dạng chuỗi bằng cách sử dụng
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;
Ví dụ như osNameAndVersion
sẽ làMicrosoft Windows 10.0.10586
System.Runtime.InteropServices.RuntimeInformation.OSDescription
- trả về mô tả của HĐH với phiên bản, v.v.
System.Environment.OSVersion.Platform
cho thống nhất?
IsOSPlatform(OSPlatform.Create("FreeBSD"))
liệu chúng có được hỗ trợ ngay bây giờ hay có thể được thêm vào trong tương lai. Tuy nhiên, không rõ ràng cách tiếp cận an toàn sẽ là gì đối với chuỗi nào sẽ vượt qua (ví dụ: trường hợp nào quan trọng hoặc không "bsd"
khớp với cả hai "FreeBSD"
và "NetBSD"
?). Xem thảo luận về tính năng này ở đây .
System.Environment.OSVersion.Platform
có thể được sử dụng trong .NET Framework và Mono đầy đủ nhưng:
System.Runtime.InteropServices.RuntimeInformation
có thể được sử dụng trong .NET Core nhưng:
Bạn có thể xác định các chức năng không được quản lý cụ thể của nền tảng như uname()
:
Vì vậy, giải pháp được đề xuất của tôi (xem mã dưới đây) có thể trông có vẻ ban đầu nhưng:
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();
}