NET Core – Code multiplateforme


.NET Core est multiplateforme, et dans ce court article, je décrirai une méthode simple pour détecter le système d’exploitation sous-jacent lors de l’exécution.

Il y a des situations où nous voulons exécuter un morceau de code différent basé sur le système d’exploitation. Cette capacité pourrait être utile dans divers scénarios, par exemple Je voulais obtenir les informations matérielles sous-jacentes afin de les lier à un mécanisme de licence. Bien qu’il soit vrai que .NET Core prend déjà en charge une grande variété d’opérations, dans ce cas d’utilisation particulier, il n’y a pas de prise en charge pour obtenir cette information multiplateforme.

Donc, la route que j’ai empruntée est de nature simple et ne nécessite pas de programmation complexe et fait le travail. Je vais décrire l’idée et n’hésitez pas à la refactoriser selon votre cas d’utilisation et l’appétit de propreté du code.

Je savais que du côté des fenêtres, Espace de noms System.Management donne accès à un riche ensemble d’informations de gestion et d’événements de gestion sur le système, les périphériques et les applications instrumentés à l’infrastructure WMI (Windows Management Instrumentation). Vous pouvez consulter plus de détails sur https://docs.microsoft.com/en-us/dotnet/api/system.management?view=netframework-4.8

Cependant, l’espace de noms System.Management ne fonctionnera pas si vous souhaitez l’utiliser dans Linux. Il existe déjà un thread GitHub pour intégrer cette fonctionnalité dans le noyau .NET, et vous pouvez le suivre sur https://github.com/dotnet/corefx/issues/22660

Comment pouvons-nous atteindre cette fonctionnalité aujourd’hui et sans complexité? La méthode que j’ai utilisée est d’utiliser l’existant La gestion du système l’espace de noms et les fonctionnalités qu’il fournit pour obtenir des informations sur le matériel les fenêtres côté des choses. Pour Linux, nous pouvons utiliser le frapper pour obtenir les mêmes résultats. Nous voulons donc exécuter des commandes bash à partir de l’application .NET Core et, seule, cette capacité est très puissante.

Décomposons cela en tâches de haut niveau:

  • Identifier le système d’exploitation à partir de l’application .NET Core
  • Exécuter des commandes associées (.NET ou Linux) basées sur le système d’exploitation et obtenir des résultats

Identifier le système d’exploitation

Application console .NET Core

Sortie de l’application sur Windows OS

Pour tester ce morceau de code sous Linux, j’ai utilisé Docker Linux – Ubuntu et Linux-armv7 debian image en raison d’une utilisation simple, mais le résultat devrait être le même si vous déployez manuellement l’application publiée sur ces systèmes d’exploitation.

Retrouvez ci-dessous les captures d’écran de l’exécution de la même application sous Linux. Pour simplifier les choses, un Docker et comment publier une application .NET Core la discussion sort du cadre de ce billet.

Application exécutée sur un conteneur Linux

Obtention d’informations sur le matériel

Quel que soit le titre de cette section, cette partie montrera également comment exécuter le frapper commande sur Linux via .NET Core. Voici un code légèrement modifié de l’exemple précédent. Notez que j’ai omis la partie pour MAC, car le concept est le même, et vous pouvez l’implémenter en suivant le même modèle.

Code modifié pour exécuter des fonctionnalités spécifiques à la plate-forme

Le programme modifié, en général, est à nouveau simple; nous encapsulons les fonctionnalités spécifiques à la plate-forme dans des classes distinctes, puis utilisons simplement celles du bloc correspondant. Voici la sortie lorsqu’elle est exécutée à la fois sur Windows et Linux. (Notez que je lis des données légèrement différentes des deux plates-formes, encore une fois, cela peut être n’importe quoi).

sous Windows

sur Docker Linux Image

La composition elle-même est très simple; vous exécutez la logique que vous souhaitez en fonction de la plate-forme. Vérifiez ci-dessous le code correspondant CPUInformationChecker (parties Windows et Linux)

Code spécifique Windows pour obtenir des informations sur le processeur

Commande bash Linux

Méthode d’extension pour encapsuler la fonctionnalité d’exécution bash

Il s’agissait donc d’un moyen très simple d’exécuter du code spécifique à la plate-forme dans certaines situations. La technique mentionnée ci-dessus peut être optimisée davantage, et vous pouvez également utiliser des indicateurs de compilation conditionnelle si vous le souhaitez.

N’hésitez pas à demander dans les commentaires si quelque chose n’est pas clair. Bon codage!

Close Menu