.Net Core 3.0 (C#,F#, Visual basic .Net)

Parce qu'il en faut pour tout le monde, discutez ici d'ADA, de shell et autres Wolfram...

Modérateur : Francois

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » lun. 9 déc. 2019 16:00

Aller, on va se faire un peu de .Net Core :mrgreen:

Il y a plusieurs façons de faire du .Net Core suivant le matériel et les logiciels à disposition. Dans l’absolu, si vous avez déployé le SDK .Net Core 3 sur une machine (linux, win, mac …) ou directement sur le PI, un simple éditeur de texte peut suffire puisque toutes les fonctions nécessaires sont disponibles en ligne de commande avec .Net Core CLI. L’idéal étant quand même d’utiliser un IDE surtout si on vise des projets conséquents. Ce que je vais proposer ici, c’est d’utiliser Visual Studio 2019 Community qui est gratuit et on ne peut plus adapté pour faire du .Net . Il y a bien sur des prérequis pour pouvoir utiliser cet outil. Il faut un PC (ou une vm) qui tourne au minimum sous Windows 7 SP1. Si vous êtes sur Mac ou Linux, vous pouvez utiliser Visual Studio Code ou n’importe quel autre IDE, ce qui ne change rien aux codes que je pourrais proposer mais je ne détaillerais pas ici les procédures pour la mise en œuvre.

Avant de commencer, je précise que Visual Studio 2019 n’a rien à voir avec des trucs comme Geany ou d’autres ‘colorisateurs’ de code. C‘est un vrai IDE multi langage et multi plateforme, extrêmement puissant et très complet. Si vous n’envisagez qu’une petite bricole de temps en temps pour le PI, oubliez tout de suite cet outil. Cela ne s’adresse qu’a des gens (débutants ou pas) qui veulent vraiment programmer efficacement en utilisant des méthodes modernes. Partez tout de suite du principe que Visual Studio est un outil de développement qui il n’y pas encore pas si longtemps n’était réservé qu’aux professionnel et que la version désormais gratuite ‘Community’ dispose de la même puissance que la version Pro.


Installation et initialisation de Visual Studio 2019 Community pour .Net Core.

Il suffit de lancer l’outils de d’installation depuis cette page et de suivre la procédure. Pour utiliser .Net Core 3, vous devrez activer les options Développement web et ASP.NET et Développement multiplateforme .NET Core. Ne faites pas la bêtise d‘activer toutes les options si vous n’en avez pas besoin, sinon vous allez vous retrouver avec des gigas de compilateurs, outils et autres SDKs totalement inutile.

installvs.png
installvs.png (154.38 Kio) Vu 377 fois
Modifié en dernier par Bud Spencer le lun. 9 déc. 2019 17:00, modifié 1 fois.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » lun. 9 déc. 2019 17:00

Création d’un projet .Net Core 3.0.

Alors on peut faire de tout. Applications console, services, applications web, api, bibliothèques, applications UI ect … VS propose déjà par défaut des templates tout fait pour plusieurs types de projet et on peut en trouver d’autres sur le net. Ici, je fais le choix d’un projet ASP.NET Core Vide. Le Template va juste me mettre en place les différentes dépendances nécessaires et les fichiers de projets par défaut.

1 : Au démarrage de VS, choisir Créer un projet

2 : Sélectionner Application web ASP.NET Core

3 : Entrez le nom du projet (je l’ai appelé MyApp). Le chemin ou vous allez l’enregistrer (par défaut VS les place dans le rep repos de l’utilisateur, mais vous pouvez le mettre ailleurs si à vous chante.). La case ‘Placez la solution et le projet dans le même répertoire’ sert à définir si l’on veut créer l'arborescence d'une solution (qui peut contenir plusieurs projet) ou un projet seul. Si par exemple vous envisagez de créer des bibliothèques séparées à intégrer dans votre projet vous pouvez décocher. Cliquer sur Créer.

4 : Sélectionner .Net Core, ASP.NET Core 3.0. Projet vide. Pour débuter je vous recommande de laisser ‘aucune authentification’ et de décocher ‘Configurer pour HTTPS’. Cliquer sur Créer.

A partir de là, VS se charge de tout. Il va créer les répertoires et les fichiers nécessaires et ouvrir votre nouveau projet.
create_prj.png
create_prj.png (346.28 Kio) Vu 374 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

cbalo
Raspinaute
Messages : 272
Enregistré le : sam. 24 août 2019 06:05

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par cbalo » lun. 9 déc. 2019 17:06

Cool ce début de tuto. :D

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » lun. 9 déc. 2019 17:50

Dans la présentation par défaut de VS, vous avez normalement sur la droite une fenêtre qui est ‘l’Explorateur de solution’ qui représente l’arborescence de votre solution sous la forme Solution/projets/fichiers et sous répertoires du projet. Pour ce projet VS à ajouté les composants .Net Core et AspNetCore requis et créé 2 fichiers de base. Program.cs qui contient le point d’entré main() et Startup.cs qui est en quelque sorte la class principale du programme. Si vous n’êtes pas habitué à la poo et au concept d’injection de dépendance, tout ça doit vous paraitre un peu étrange, mais nous verrons ça plus tard. Vous pouvez ouvrir ces fichiers dans l’éditeur code en double-cliquant dessus.

A part entrer le nom du projet à la création, on n’a encore pas toucher le clavier et pourtant on a déjà une application qui fonctionne. Pour démarrer le ‘programme’, sélectionnez votre application dans le menu d’exécution et cliquer dessus (ou appuyer sur F5). Le port par défaut est 5000 et s’il n’a jamais été autorisé, le firewall peut vous demander votre avis. L’application démarre et dans la foulé elle démarre votre navigateur à la page http://localhost:5000 qui vous renvois le Hello World qui est la route par défaut (dans Startup.cs)
run#1.png
run#1.png (224.92 Kio) Vu 373 fois
pour arrêter le programme ctrl+c ans la fenêtre de commande ou un petit click sur le carré rouge d'arrêt dans le menu de l'IDE.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 10:10

Nous voila donc avec un core d’application qui embarque un service web (j’entends par là qu’elle sait accepter et répondre à des requête http). Pour faire le parallèle avec NodeJS c’est un peu comme si on avait créé une application vide qui reposerait sur Express. Ici on ne le voit pas mais ce qui sert de serveur web se nomme Kestrel et il est automatiquement configuré par la méthode Host.CreateDefautBuilder qui se trouve dans le fichier Program.cs.

Une fois votre application démarrée, vous pouvez y accéder localement en utilisant l’URL http://localhost:5000. Si vous essayer de remplacer localhost par l’ip local du vous n’accéderez pas à la page. Seul localhost est autorisé et l’application n’est pas accessible depuis une autre machine du réseau. C’est la configuration par défaut et on le voit dans la console quand on démarre l’appli. Pour que l’application soit accessible depuis les interfaces réseaux du poste, il faut dire au serveur Kestrel d’écouter sur toutes les interfaces (ou une bien spécifique si besoin est). Pour ça il suffit d’ajouter la ligne suivante dans la configuration du Host (ConfigureWebHostDefaults) qui se trouve dans le fichier program.cs :

webBuilder.UseUrls("http://*:5000") ;

Maintenant, quand vous démarrer l’application vous pouvez voir dans la console que l’écoute se fait sur toutes les interfaces et vous pouvez y accéder depuis un autre poste au travers de l’url http://xxx.xxx.xxx.xxx:5000 (ou xxx représente bien sur une des IP du poste qui héberge l’application. En tant normale on peu by-passer cette étape pendant la période de développement mais comme le but c’est quand même de faire des applications pour le pi, c’est quand même bien de pouvoir y accéder depuis un autre poste, d’autant que le pi n’as pas forcement de GUI et de navigateur ou de clavier souris.
Fichiers joints
allnet.png
allnet.png (254.56 Kio) Vu 354 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 11:43

Il reste maintenant à installer ce programme sur le PI. Alors il y a tout un tas de façon de faire ça aussi. On peut générer les sorties de l’application pour arm et les recopier sur le PI, on peut les transférer en FTP, ou on peut tout simplement partager le /home avec Samba et tout faire depuis le pc de dev en utilisant l’outils de déploiement de VS (je vous laisse vous documenter sur l’utilisation et la configuration de Samba sous Raspbian).

Pour l’exemple, je n’ais pas de pi de dispo sous la main, mais je vais le faire sur un VM Debian10 ce qui revient exactement au même. Sur cette vm, je n’ai pas installé le SDK .Net Core. J’ai juste installé vite fait les runtimes et j‘ai partagé mon /home avec droit d’écriture et j’y accède directement depuis mon explorateur de fichier Windows. Perso je vais mettre ça dans le répertoire Documents (\\ip.du.debian\user\Documents\MyApp). Je créer un nouveau dossier MyApp dans Documents (on est sous windows, donc click droit dans l’explorateur, nouveau->dossier … la routine quoi.).

Il ne me reste plus qu’à créer un profil de déploiement dans VS et publier l’application.

1 : click droit sur le projet ans l’explorateur de solution -> Publier

2 : je selectionne ‘Dossier’ et j’entre le chemin de destination (chez vous \\ipdupi\home\pi\Documents\MyApp), puis click sur avancé.

3 : Sélection de la config Debug pour l’instant, on cible net core 3.0 et on fait un déploiement dépendant du framework. Dans runtime cible, je sélectionne linux-x64 parce que j’envoie sur une vm linux 64, mais pour le pi il faut sélectionner linux-arm. Enregistrer.

4 : Créer un profil.

5 Votre profil de déploiement est créé (vous pouvez en créer plusieurs si besoin). Vous prouvez le renommer, le supprimer, l’éditer. Il ne reste plus qu’à envoyer l’application sur la cible en cliquant sur le bouton Publier et suivre la procédure et les résultat ans la fenêtre de sortie (normalement en bas dans VS par défaut).
publish.png
publish.png (142.48 Kio) Vu 354 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 12:34

Je peux maintenant démarrer mon appli sur le pi. Pour ça je me connecte en ssh depuis le pc de développement en utilisant powershell, (vous pouvez aussi utiliser putty ou n’importe quel autre client ssh).

Je rentre dans le rep de l’application et je tape juste une commande ./MyApp et j’ai accès a mon appli depuis mon navigateur.
run#2.png
run#2.png (66.46 Kio) Vu 352 fois
Désormais, chaque fois que je modifierais mon programme, je pourrais le mettre à jour sur le PI juste en utilisant le profil de publication que j’ai créé.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 13:20

Un des intérêts à utiliser un bon IDE, c’est de pouvoir profiter d’un bon débogueur. Ça permet de suivre pas à pas le déroulement d’une procédure, de connaitre à l’instant la valeur des variables, de surveiller les entrées/sorties, pour résumer, ça sert à entrer à l’intérieur d’un programme pendant son exécution. Avec VS, rien de plus simple. On va donc démarrer le programme sur le PI et s’y connecter.

Une fois votre programme déployé, démarrer le sur le PI.

Dans VS, ouvrez le fichier Startup.cs (ce sera fait …).

1 : Aller dans le menu Deboguer->Attacher au processus

2 : Sélectionner le type de connection SSH, saisir l’adresse ip du PI comme cible de connexion et valider par enter

3 : Dans la fenêtre d’authentification, renseigner le nom de l’utilisateur (pi) et le mot de passe puis cliquer sur connexion

4 : Cocher la case ‘Afficher les processus de tous les utilisateurs’ si elle ne l’est pas. Rechercher votre application dans la liste des processus (MyApp ou dotnet dans certains cas) et cliquer sur attacher.

5 : Votre IDE est maintenant connectée au processus. (Pour le déconnecter il suffit de cliquer sur le bouton d’arrêt de débogage)
debug.png
debug.png (214.58 Kio) Vu 351 fois
Pour cela, cela sous-entend que votre programme soit déployé en mode Debug (Souvenez-vous dans la création du profil de déploiement) et que le code exécuté soit le même que celui qui se trouve dans l’IDE.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 13:44

Maintenant que l’IDE est connectée au processus distant, on peut placer des points d’arrêts ou on veut et scruter le déroulement du programme en temps réel. Pour faire l’essais, placer un point d’arrêt sur la ligne qui retourne le Hello World dans le fichier Startup.cs.

1 : Pour placer un point d‘arrêt, il suffit de cliquer dans la marge à hauteur de la ligne et vous allez avoir un beau point rouge. Ensuite appeler la page depuis un navigateur.

2 : A ce moment, le programme s’arrête sur la ligne dans la fenêtre de code (la ligne devient sur fond jaune) et vous pouvez visualiser tout ce que vous voulez et avez accès à l’état de tout ce qui compose l’application à l’instant de l’arrêt juste en passant la souris sur ce que vous voulez.

3 : Pour que le programme reparte, cliquer sur Continuer et pour enlever le point d’arrêt, cliquer simplement dessus.
debug#2.png
debug#2.png (183.49 Kio) Vu 351 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 827
Enregistré le : lun. 15 août 2016 21:38

Re: .Net Core 3.0 (C#,F#, Visual basic .Net)

Message par Bud Spencer » mar. 10 déc. 2019 22:23

Aller on va se faire peu de GPIO.

Pour ça on va déjà ajouter les packages System.Device.Gpio et Iot.Device.Bindings (j’en ai parlé au tout début du post). Rassurez-vous, on est sous windows et avec un vrai outil de développement, donc on ne pas se taper des dizaines de lignes de commande barbare et de la recompil pour ça. Comme d’hab quelques clics vont suffire pour faire tout le boulot.

Dans l’explorateur de solution vous faites un clic droit sur le projet (MyApp) et dans la liste vous sélectionnez ‘Gerer les packages Nuget…’. Dans la fenêtre qui s’ouvre, vous sélectionnez ‘Parcourir’ et dans le champs de recherche vous saisissez system.device.gpio. Vous sélectionnez le package et à droite vous avez un bref résumé de ce qu’il contient (dernière version stable c’est bien) et un bouton ‘installer’ sur lequel vous vous empressez de cliquer, puis ok, puis vous accepter la licence MIT. Vous refaite la meme manip pour ajouter Iot.Device.Bindings et vous fermer la fenêtre Nuget. Dans votre explorateur de soluce, vous pouvez constater que les packages ont été ajouté au projet (et non pas au système …). Pour faire le parallèle avec NodeJS (voir tuto) cela correspond un peu aux packages npm que l'on installait en local de l'appli sauf que la on click et c'est plus joli sur l'ecran.
SystemDeviceGpio.png
SystemDeviceGpio.png (116.44 Kio) Vu 335 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Autres langages »