c# - tutorial - Déterminer le système d'exploitation dans.NET Core




c# net core tutorial (2)

Méthode

System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()

Argument possible

OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux

Exemple

bool isWindows = System.Runtime.InteropServices.RuntimeInformation
                                               .IsOSPlatform(OSPlatform.Windows);

Mise à jour

Merci au commentaire de Oleksii Vynnychenko

Vous pouvez obtenir le nom et la version du système d'exploitation sous forme de chaîne à l'aide de

var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;

Par exemple, osNameAndVersion serait Microsoft Windows 10.0.10586

https://code.i-harness.com

Comment déterminer le système d'exploitation sur lequel mon application .NET Core s'exécute? Dans le passé, je pouvais utiliser Environment.OSVersion .

Quel est le moyen actuel de déterminer si mon application est en cours d'exécution sur Mac ou Windows?


System.Environment.OSVersion.Platform peut être utilisé intégralement en .NET Framework et Mono, mais:

  • La détection Mac OS X n'a ​​presque jamais fonctionné pour moi sous Mono
  • il n'est pas implémenté dans .NET Core

System.Runtime.InteropServices.RuntimeInformation peut être utilisé dans .NET Core, mais:

  • il n'est pas implémenté intégralement .NET Framework et Mono
  • il ne détecte pas la plateforme au moment de l'exécution, mais utilise plutôt des informations codées en dur
    (voir le numéro de corefx n ° 3032 pour plus de détails)

Vous pouvez identifier des fonctions non gérées spécifiques à une plate-forme, telles que uname() mais:

  • il peut provoquer une erreur de segmentation sur des plates-formes inconnues
  • n'est pas autorisé dans certains projets

Donc, ma solution suggérée (voir le code ci-dessous) peut sembler sournoise au début, mais:

  • il utilise 100% de code géré
  • cela fonctionne dans .NET, Mono et .NET Core
  • cela fonctionne comme un charme jusqu'à présent dans la bibliothèque Pkcs11Interop
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();
}




.net-core