Wie kann ich feststellen, auf welchem Betriebssystem meine .NET Core-App ausgeführt wird? In der Vergangenheit konnte ich verwenden Environment.OSVersion
.
Wie kann ich derzeit feststellen, ob meine App auf Mac oder Windows ausgeführt wird?
Wie kann ich feststellen, auf welchem Betriebssystem meine .NET Core-App ausgeführt wird? In der Vergangenheit konnte ich verwenden Environment.OSVersion
.
Wie kann ich derzeit feststellen, ob meine App auf Mac oder Windows ausgeführt wird?
Antworten:
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
bool isWindows = System.Runtime.InteropServices.RuntimeInformation
.IsOSPlatform(OSPlatform.Windows);
Dank des Kommentars von Oleksii Vynnychenko
Sie können den Namen und die Version des Betriebssystems als Zeichenfolge abrufen
var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;
ZB osNameAndVersion
wäreMicrosoft Windows 10.0.10586
System.Runtime.InteropServices.RuntimeInformation.OSDescription
System.Environment.OSVersion.Platform
Konsistenz implementieren ?
IsOSPlatform(OSPlatform.Create("FreeBSD"))
ob diese jetzt unterstützt werden oder in Zukunft hinzugefügt werden können. Es ist jedoch nicht sehr klar, was ein sicherer Ansatz für die zu übergebenden Zeichenfolgen wäre (z. B. spielt der Fall eine Rolle oder passt "bsd"
er zu beiden "FreeBSD"
und "NetBSD"
?). Siehe Diskussion zu dieser Funktion hier .
System.Environment.OSVersion.Platform
kann in vollem .NET Framework und Mono verwendet werden, aber:
System.Runtime.InteropServices.RuntimeInformation
kann in .NET Core verwendet werden, aber:
Sie könnten plattformspezifische, nicht verwaltete Funktionen wie uname()
:
Meine vorgeschlagene Lösung (siehe Code unten) mag zunächst schlau aussehen, aber:
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();
}