Cette semaine, nous allons profiter de la release d'un fixe sur notre librairie C# (plus particulièrement du package Nuget de cette librairie) pour faire une petite synthèse de l'utilisation du package NuGet avec .Net Core.
Depuis longtemps, nous publions notre librairie de programmation C# sous forme de package Nuget (Yoctopuce.YoctoLib), en plus du repository GitHub et de notre site Web. Ce package permet d'utiliser notre API de programmation avec des projets .Net Framework ou des projets .Net Core.
Cette semaine, nous avons dû fixer une erreur dans ce package qui apparaissait dans des projets .Net Core lorsqu'on utilisait la commande "dotnet publish".
Après avoir fixé le problème de notre package NuGet, on a réalisé qu'on n’avait jamais vraiment parlé de l'utilisation de cette commande. Nous allons donc réaliser une petite application en ligne de commande qui va simplement afficher la liste des modules Yoctopuce branchés sur les ports USB, et on va la préparer à être déployée avec cette commande.
Développer
La première étape est de créer le projet .Net Core avec la commande suivante:
dotnet new console
Cette commande crée un nouveau projet .Net Core pour une application terminal dans le répertoire courant. Il faut ensuite ajouter notre librairie de programmation .Net à l'aide de la commande suivante:
dotnet add package Yoctopuce.YoctoLib
Il ne reste qu'à écrire l'application en C#.Note: Si vous n'avez jamais utilisé nos modules ou notre librairie, il s'agit du code d'exemple qui est inclus dans la documentation de tous les modules.
if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS)
{
Console.WriteLine("RegisterHub error: " + errmsg);
Environment.Exit(0);
}
Console.WriteLine("Device list");
YModule m = YModule.FirstModule();
while (m != null)
{
string serialNumber = m.get_serialNumber();
string productName = m.get_productName();
Console.WriteLine(serialNumber + " (" + productName + ")");
m = m.nextModule();
}
YAPI.FreeAPI();
On peut ensuite utiliser la commande "dotnet run" pour compiler l'application et l’exécuter.
C:\tmp\dotnet_test>dotnet run Device list LIGHTMK3-17EFC2 (Yocto-Light-V3)
Cette commande compile le code source de l'application et génère les fichiers binaires dans le répertoire de sortie (par défaut "bin/Debug") en utilisant la version de .Net installée sur la machine.
Cette application fonctionne donc sur notre machine, mais il reste à la publier pour qu'elle fonctionne sur un PC qui n'a pas .Net installé (ou une autre version).
Publier
Pour fonctionner, l'application .Net a besoin du code que nous avons compilé, mais aussi de la librairie Yoctopuce ainsi que du runtime .NET.
L'étape de publication doit générer une version de l'application qui contient tous ces éléments afin d'être facilement installable sur n'importe quelle machine. La commande "dotnet publish" fait exactement ça.
Il y a cependant quelques options à lui passer afin d'obtenir une vraie application portable.
Par défaut, la commande "publish" n'inclut pas le runtime .Net. Pour obtenir une application complètement indépendante et portable, il faut utiliser l'option --self-contained. Cette option inclut dans le répertoire de sortie le runtime .Net.
L'option -o permet de spécifier un répertoire de sortie.
Par exemple, la commande suivante permet de packager l'application et toutes ses dépendances dans le sous répertoire ready_to_deploy:
dotnet publish --self-contained -o ready_to_deploy
Une fois cette commande exécutée, il n'y a plus qu'à copier le répertoire ready_to_deploy sur n'importe quelle machine Windows pour pouvoir utiliser l'application.
Il n'est plus nécessaire de lancer l'application avec dotnet. Pour exécuter l’application, il suffit de lancer l’exécutable qui se trouve dans le répertoire:
C:\ready_to_deploy>demo_dotnet.exe Device list LIGHTMK3-17EFC2 (Yocto-Light-V3)
Conclusion
Pour résumer, la commande dotnet publish permet de créer des applications autonomes et portables, prêtes à être déployées sur n'importe quelle machine sans nécessiter d'installer .NET.
