Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
csharp [Le 15/02/2023, 11:46] rafbor créée |
csharp [Le 01/02/2025, 14:47] (Version actuelle) rafbor Mise à jour pour la version courante |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>BROUILLON}} | + | {{tag>Bionic Focal Jammy programmation BROUILLON}} |
---- | ---- | ||
====== C# ====== | ====== C# ====== | ||
- | C# (CSharp) est un langage de programmation orientée objet, développé par Microsoft pour la plateforme .NET, dérivé de C, C++ et proche du Java. | + | [[wpfr>C_sharp|C#]] (CSharp) est un langage de programmation orientée objet, développé par Microsoft pour la plateforme .NET, dérivé de [[:gcc|C, C++]] et proche du [[java|Java]]. |
===== Pré-requis ===== | ===== Pré-requis ===== | ||
Ligne 19: | Ligne 19: | ||
Dans chaque cas, suivre cette [[https://learn.microsoft.com/fr-FR/dotnet/core/install/linux-ubuntu|documentation]]. | Dans chaque cas, suivre cette [[https://learn.microsoft.com/fr-FR/dotnet/core/install/linux-ubuntu|documentation]]. | ||
- | <note info>.NET 6 est inclus dans les dépôts Ubuntu 22.04 et 22.10</note> | + | <note info>depuis Ubuntu 22.04, .NET est inclus dans les dépôts</note> |
- | Pour vérifier la version du SDK installée, exécuter dans un [[https://doc.ubuntu-fr.org/terminal|terminal]]: | + | Pour vérifier la version du SDK installée, exécuter dans un [[:terminal]]: |
<code>dotnet --list-sdks</code> | <code>dotnet --list-sdks</code> | ||
Le résultat doit être similaire à: | Le résultat doit être similaire à: | ||
- | <code>6.0.406 [/usr/share/dotnet/sdk]</code> | + | <code>8.0.112 [/usr/lib/dotnet/sdk]</code> |
Pour vérifier la version du runtime installée: | Pour vérifier la version du runtime installée: | ||
<code>dotnet --list-runtimes</code> | <code>dotnet --list-runtimes</code> | ||
Le résultat doit être similaire à: | Le résultat doit être similaire à: | ||
- | <code>Microsoft.AspNetCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] | + | <code> |
- | Microsoft.NETCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.NETCore.App] | + | Microsoft.AspNetCore.App 8.0.12 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App] |
+ | Microsoft.NETCore.App 8.0.12 [/usr/lib/dotnet/shared/Microsoft.NETCore.App] | ||
</code> | </code> | ||
===== Outils pour le développement ===== | ===== Outils pour le développement ===== | ||
- | Un projet .NET est composé d'une multitude de fichiers. Il est donc conseillé d'utiliser un IDE tel que [[https://www.jetbrains.com/rider/|JetBrains Rider]] (propriétaire et payant), ou un éditeur avancé tel que [[https://code.visualstudio.com/|Visual Studio Code]], libre et gratuit. | + | Un projet .NET est composé d'une multitude de fichiers. Il est donc conseillé d'utiliser un IDE tel que [[:visual_studio_code|Visual Studio Code]], libre et gratuit, ou bien [[https://www.jetbrains.com/rider/|JetBrains Rider]] (propriétaire et payant). |
+ | Il existe également MonoDevelop qui est un IDE gratuit et open source spécialement développé par des passionnés pour amener .NET sur Linux. Fonctionne très bien avec le langage C# | ||
===== Création d'une application console .NET sans IDE ===== | ===== Création d'une application console .NET sans IDE ===== | ||
- Créer un dossier ''TestHelloWorld'' dans le dossier utilisateur. | - Créer un dossier ''TestHelloWorld'' dans le dossier utilisateur. | ||
- | - Ouvrir un [[https://doc.ubuntu-fr.org/terminal|terminal]] et se placer dans ce dossier. | + | - Ouvrir un [[:terminal|terminal]] et se placer dans ce dossier. |
- Exécuter la commande: | - Exécuter la commande: | ||
<code>dotnet new console --use-program-main</code> | <code>dotnet new console --use-program-main</code> | ||
- | Plusieurs fichiers vont être créés dont le fichier ''Program.cs'': | + | Plusieurs fichiers vont être créés dont le fichier: |
- | <code cpp> | + | <file cpp Program.cs> |
namespace TestHelloWorld; | namespace TestHelloWorld; | ||
class Program | class Program | ||
Ligne 52: | Ligne 54: | ||
} | } | ||
} | } | ||
- | </code> | + | </file> |
Pour lancer l'application, exécuter la commande: | Pour lancer l'application, exécuter la commande: | ||
<code>dotnet run</code> | <code>dotnet run</code> | ||
Ligne 63: | Ligne 65: | ||
* Pour développer en C#, il faut installer l'[[https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp|extension C#]] (normalement, l'éditeur propose de l'installer dès qu'on ouvre un fichier C#). Pour installer des extensions dans Visual Studio Code, consulter cette [[https://code.visualstudio.com/docs/editor/extension-marketplace|documentation]]. | * Pour développer en C#, il faut installer l'[[https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp|extension C#]] (normalement, l'éditeur propose de l'installer dès qu'on ouvre un fichier C#). Pour installer des extensions dans Visual Studio Code, consulter cette [[https://code.visualstudio.com/docs/editor/extension-marketplace|documentation]]. | ||
* Pour créer une IHM, il faut utiliser un framework tel que [[https://learn.microsoft.com/fr-FR/dotnet/maui/what-is-maui?view=net-maui-7.0|MAUI]] (pour Linux, développé par la communauté), [[https://platform.uno/|Uno]], [[https://avaloniaui.net/|AvaloniaUI]] ou [[https://github.com/GtkSharp/GtkSharp|GtkSharp]]. Dans l'exemple suivant, nous utiliserons GtkSharp. | * Pour créer une IHM, il faut utiliser un framework tel que [[https://learn.microsoft.com/fr-FR/dotnet/maui/what-is-maui?view=net-maui-7.0|MAUI]] (pour Linux, développé par la communauté), [[https://platform.uno/|Uno]], [[https://avaloniaui.net/|AvaloniaUI]] ou [[https://github.com/GtkSharp/GtkSharp|GtkSharp]]. Dans l'exemple suivant, nous utiliserons GtkSharp. | ||
- | Procéder ainsi: | + | Procéder ainsi:\\ |
- | * Dans le terminal intégré de Visual Studio Code, exécuter cette commande pour installer le template: | + | * Dans le terminal intégré de Visual Studio Code, exécuter cette commande pour installer le modèle: |
<code>dotnet new --install GtkSharp.Template.CSharp</code> | <code>dotnet new --install GtkSharp.Template.CSharp</code> | ||
- | * Vérifier que le template est bien installé: | + | * Vérifier que le modèle est bien installé: |
<code>dotnet new --list | grep gtkapp</code> | <code>dotnet new --list | grep gtkapp</code> | ||
Le résultat doit être: | Le résultat doit être: | ||
<code>Gtk Application gtkapp [C#] Gtk/GUI App</code> | <code>Gtk Application gtkapp [C#] Gtk/GUI App</code> | ||
- | * Choisir ''Ouvrir un dossier'', et dans la fenêtre de dialogue, créer un dossier ''TestGUI'' puis l'ouvrir. Ce nom de dossier deviendra le nom et l'espace de noms du projet. | + | * Choisir ''Ouvrir un dossier'' et, dans la fenêtre de dialogue, créer un dossier ''TestGUI'' puis l'ouvrir. Ce nom de dossier deviendra le nom et l'espace de noms du projet. |
- | * Dans le terminal intégré de Visual Studio Code, exécuter cette commande: | + | * Dans le terminal intégré de Visual Studio Code, exécuter cette commande: |
<code>dotnet new gtkapp</code> | <code>dotnet new gtkapp</code> | ||
- | Plusieurs fichiers vont se créer, dont ''MainWindow.glade'', qui est le fichier de description du formulaire, que l'on peut modifier avec Glade. Le fichier ''MainWindow.cs'' montre comment intégrer un fichier ''.glade'' dans un projet et comment gérer les événements: | + | Plusieurs fichiers vont se créer, dont ''MainWindow.glade'', qui est le fichier de description du formulaire, que l'on peut modifier avec [[:glade|Glade]]. Le fichier ''MainWindow.cs'' montre comment intégrer un fichier ''.glade'' dans un projet et comment gérer les événements: |
- | <code cpp> | + | <file cpp MainWindow.cs> |
using System; | using System; | ||
using Gtk; | using Gtk; | ||
Ligne 110: | Ligne 112: | ||
} | } | ||
} | } | ||
- | </code> | + | </file> |
Pour lancer l'application, exécuter la commande: | Pour lancer l'application, exécuter la commande: | ||
<code>dotnet run</code> | <code>dotnet run</code> | ||
Ligne 119: | Ligne 121: | ||
Pour plus d'informations, consulter [[https://learn.microsoft.com/fr-FR/dotnet/core/deploying/|cette page]]. | Pour plus d'informations, consulter [[https://learn.microsoft.com/fr-FR/dotnet/core/deploying/|cette page]]. | ||
+ | |||
+ | ===== Scripts ===== | ||
+ | Créer un projet .NET pour de petites tâches simples est un peu excessif. Pour cela il existe [[https://github.com/dotnet-script/dotnet-script|dotnet-script]] qui permet d'exécuter du code C# dans un seul fichier de script. Pas de méthode ''Main'', pas de ''.csproj'', et une compilation transparente. | ||
+ | |||
+ | ==== Installation ==== | ||
+ | Pré-requis: le SDK doit être installé. | ||
+ | | ||
+ | Exécuter dans un [[:terminal|terminal]]: | ||
+ | <code>dotnet tool install -g dotnet-script</code> | ||
+ | |||
+ | ==== Création d'un script ==== | ||
+ | dotnet-script est doté d'une commande d'initialisation pour générer un simple script. | ||
+ | * Créer un dossier ''DotNetScript'' dans le dossier utilisateur. | ||
+ | * Ouvrir un [[:terminal|terminal]] et se placer dans le dossier. | ||
+ | * Exécuter la commande: | ||
+ | <code>dotnet script init</code> | ||
+ | Deux fichiers vont se créer: ''omnisharp.json'' et ''main.csx''. | ||
+ | * ''omnisharp.json'' contient les paramètres du script, tels que le framework cible et les références nuget autorisées. | ||
+ | * ''main.csx'' est structuré pour contenir un exemple simple d'un Hello World fonctionnel. Le contenu ressemblera à ce qui suit : | ||
+ | <file cpp main.csx> | ||
+ | #!/usr/bin/env dotnet-script | ||
+ | Console.WriteLine("Hello world!"); | ||
+ | </file> | ||
+ | * Sur Linux, les scripts ainsi créés peuvent être exécutés directement comme s'ils étaient des exécutables. Vérifiez que le script fonctionne en exécutant la commande suivante: | ||
+ | <code>./main.csx</code> | ||
+ | Résultat: | ||
+ | <code>Hello World!</code> | ||
+ | Ci dessous un exemple qui exploite un peu plus le potentiel de .NET en créant un tableau de personnes (nom et âge). Le script se verra passer un paramètre, stocké dans la variable ''Args'' et récupéré dans la variable ''nAge''. Ensuite, le script filtrera les personnes qui ont moins de ''nAge'' années, triées par âge. | ||
+ | Modifiez le fichier ''main.csx'' en copiant et collant le contenu suivant: | ||
+ | <file cpp main.csx> | ||
+ | #!/usr/bin/env dotnet-script | ||
+ | |||
+ | using System; | ||
+ | using System.Data; | ||
+ | |||
+ | Int16 nAge = 0; | ||
+ | if (Args.Count > 0) | ||
+ | nAge = Convert.ToInt16(Args[0]); | ||
+ | else | ||
+ | { | ||
+ | Console.WriteLine("L'âge n'a pas été spécifié"); | ||
+ | return; | ||
+ | } | ||
+ | DataTable dtable = new DataTable(); | ||
+ | dtable.Columns.Add("Nom", typeof(string)); | ||
+ | dtable.Columns.Add("Age", typeof(Int16)); | ||
+ | dtable.Rows.Add("Silvia", 32); | ||
+ | dtable.Rows.Add("Roberto", 28); | ||
+ | dtable.Rows.Add("Leonardo", 25); | ||
+ | dtable.Rows.Add("Francesco", 59); | ||
+ | dtable.Rows.Add("Alessandro", 55); | ||
+ | dtable.Rows.Add("Lorenzo", 18); | ||
+ | dtable.Rows.Add("Mattia", 41); | ||
+ | dtable.Rows.Add("Tommaso", 62); | ||
+ | dtable.Rows.Add("Gabriele", 39); | ||
+ | dtable.Rows.Add("Federico", 20); | ||
+ | int n=0; | ||
+ | DataRow[] dtRows; | ||
+ | dtRows = dtable.Select("Age<" + nAge, "Age ASC"); | ||
+ | string strResult; | ||
+ | Console.WriteLine("Ont moins de " + nAge + " ans"); | ||
+ | foreach(DataRow row in dtRows) | ||
+ | { | ||
+ | strResult = string.Format("{0, -15}Age: {1}", row["Nom"], row["Age"]); | ||
+ | Console.WriteLine(strResult); | ||
+ | } | ||
+ | </file> | ||
+ | Exécuter le script avec la commande: | ||
+ | <code>./main.csx 50</code> | ||
+ | Résultat: | ||
+ | <code> | ||
+ | Ont moins de 50 ans | ||
+ | Lorenzo Age: 18 | ||
+ | Federico Age: 20 | ||
+ | Leonardo Age: 25 | ||
+ | Roberto Age: 28 | ||
+ | Silvia Age: 32 | ||
+ | Gabriele Age: 39 | ||
+ | Mattia Age: 41 | ||
+ | </code> | ||
+ | ==== Mode REPL (Read-Evaluate-Print-Loop) ==== | ||
+ | Le mode REPL ("mode interactif") est lancé en exécutant dotnet-script sans aucun argument. | ||
+ | |||
+ | Le mode interactif permet de fournir des blocs individuels de code C# qui sont exécutés dès que l'on appuie sur la touche Entrée: | ||
+ | <code> | ||
+ | ~$ dotnet script | ||
+ | > var x = 1; | ||
+ | > x+x | ||
+ | 2 | ||
+ | </code> | ||
+ | |||
+ | ===== Résolution des problèmes ===== | ||
+ | |||
+ | Consulter [[https://learn.microsoft.com/fr-FR/dotnet/core/install/linux-package-mixup|cette page]] de documentation Microsoft pour corriger divers problèmes, dont ceux liés aux erreurs lors de l'exécution des commandes: | ||
+ | <code>dotnet new | ||
+ | dotnet run</code> | ||
===== Voir aussi ===== | ===== Voir aussi ===== | ||
Ligne 126: | Ligne 224: | ||
* [[http://www.csharphelp.com/|C# Help]] | * [[http://www.csharphelp.com/|C# Help]] | ||
* [[https://www.c-sharpcorner.com/|C# Corner]] | * [[https://www.c-sharpcorner.com/|C# Corner]] | ||
+ | * [[https://github.com/dotnet-script/dotnet-script|dotnet-script]] sur Github | ||
---- | ---- | ||
//Contributeurs principaux : [[:utilisateurs:rafbor]].// | //Contributeurs principaux : [[:utilisateurs:rafbor]].// |