Forum Programmation.c# Environnement de développement pour C#

Posté par  . Licence CC By‑SA.
Étiquettes :
5
8
fév.
2021

Bonjour.

Et pataper siouplaît, je suis un vieux développeur C/C++ qui se débrouillait très bien jusqu'à présent avec Geany et ses distributions Linux préférées (Gentoo, Linux Mint, LMDE). Je voudrais débuter en C# mais pas avec VSCode — usine à gaz, trop lent, trop compliqué, pas confiance, pas pour moi. J'ai commencé par installer le paquet "mono-complete" et lancé Geany pour créer des applications console. Jusque là, tout va bien. Maintenant, il me faut passer à des applications graphiques avec boutons, zones de texte, tout ça… C'est là que je galère.

Tous les liens que je vois sur internet me mènent soit à Visual Studio Code, soit à MonoDevelop. Or lorsque je suis le guide du site https://www.monodevelop.com/download/ , il n'y a pas de paquet nommé "monodevelop" — j'ai poussé le vice jusqu'à vérifier le fichier https://download.mono-project.com/repo/ubuntu/dists/vs-focal/main/binary-amd64/Packages et en effet: pas de "monodevelop". Noter au passage que j'ai d'abord dû corriger l'architecture cible en limitant les paquets à [arch=amd64], mais bon, j'y suis arrivé tout seul, c'est l'essentiel. Par contre, j'ai beau essayer aussi bien la cible "vs-focal" que "focal", il n'existe aucun "monodevelop". Leur guide est complètement faux! C'est quoi ce bigntz?

J'ai raté quelque chose? Que me faut-il pour développer des applications Mono graphiques? Pour les applications console, pas de problème avec Geany mais ce serait trop simple, évidemment. J'ai vu qu'il y a le modèle GDI+flat, qui fait fonctionner du code .Net aussi bien sous Windows que sous Linux.

J'ignore ce qu'il me faut en fait. À défaut, je voudrais savoir si je peux me démerder avec Geany pour ce genre de "mission" (ce serait même le pied en réalité, j'adore Geany). Ma machine cible est une VM Linux Mint 20 (basée sur focal).

EDIT: Lorsque je parle de machine cible, c'est la machine (Linux Mint) sur laquelle je souhaite compiler les codes source C# des exercices qui sont donnés. Tout ce dont j'ai besoin, c'est que ces exercices donnent les mêmes (approximativement, si c'est moche, je m'en tape) résultats que sous Windows.

EDIT: Et pour être clair, je n'ai jamais fait de C# et je ne sais pas comment ça marche ni son architecture… J'ai juste entendu le nom de certains outils et vu des gens se servir de Visual Studio [Code] pour ça, rien de plus. Je ne dis pas ça pour qu'on me l'explique, bien entendu, c'est juste pour situer le contexte donc ne partez pas du principe que je sais de quoi vous parlez dans vos commentaires.

Un petit coup de main serait bienvenu.

Merci d'avance.

  • # .Net Core

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    Hello,

    Une piste serait de ne plus employer Mono, mais directement .Net Core: c'est le nouveau moteur de Microsoft et il est open-source et compatible Linux nativement.

    Je l'ai employé pour un petit PoC pour créer une API REST et Microsoft fournissait directement un répertoire APT pour installer .Net Core sur Ubuntu.

    Je n'ai pas donc pas essayé de faire d'interface graphique avec ce moteur, mais ça doit sûrement être possible, car c'est le nouveau fer de lance de Microsoft et qu'il doit à terme remplacer Mono si je me souviens bien.

    • [^] # Re: .Net Core

      Posté par  . Évalué à 2.

      Je vois. Merci pour ces précisions.

      Et côté environnement de développement, qu'existe-t-il? J'ai bien essayé Visual Studio Code mais sans parvenir à le faire fonctionner. Ceci dit j'ai dû faire ça à l'arrache et je n'ai pas eu le temps d'approfondir. .Net Core est-il utilisable avec Geany ou me faut-il un autre environnement?

      • [^] # Re: .Net Core

        Posté par  . Évalué à 3. Dernière modification le 09 février 2021 à 20:28.

        Il y a Rider : https://www.jetbrains.com/fr-fr/rider/

        Pour faire des GUI, tu as le choix entre AvaloniaUI, Uno, Blazor, et pas mal d'autres.

        Tu n'as pas à t'embêter avec WinForms (et son clone linux 'compatible' mais moche MonoForms), c'est clairement dépassé et rétrograde (et le rendu par rapport à Windows est juste caca)

        Pour le SDK, .NET Core 3.1 ou .NET 5 (voire .NET 6, la prochaine LTS en Décembre), s'impose clairement !

        Moi je prendrais AvaloniaUI pour faire du desktop Linux/Mac/Windows. C'est le meilleur, et ça utilise .NET Core.

        Sinon, pour développer VSCodium est très bien (fork de VSCode sans la télémétrie), mais pour faire des interfaces graphiques, rien ne vaut Visual Studio (tout court). Après, j'entends que du bien de Rider, mais je n'ai jamais testé.

        "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

        • [^] # Re: .Net Core

          Posté par  . Évalué à 2. Dernière modification le 09 février 2021 à 22:19.

          Merci bien mais tout ce que je souhaite, c'est faire en sorte que les exercices donnent les mêmes résultats en les compilant sous Linux Mint (avec l'outil qui va bien) que sous Windows. De plus, j'ai pas le choix, c'est le framework Winforms qui est mentionné dans l'énoncé. La compatibilité m'importe peu (je n'ai pas besoin de faire tourner ailleurs ce que je compile sur ma machine), j'ai juste besoin de pouvoir compiler le même exercice et que ça donne des fenêtres avec les boutons et les contrôles au bon endroit. Si c'est moche, ça m'est égal.

          • [^] # Re: .Net Core

            Posté par  . Évalué à 2.

            Au bon endroit dans mon expérience sous linux avec Mono c'est pas le cas du tout (rendu très différent d'un projet WinForms par rapport à Windows).

            Mais peut être que ça a changé.

            "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

            • [^] # Re: .Net Core

              Posté par  . Évalué à 2.

              J'aurais pas dû dire "au bon endroit". En fait ça m'est complètement égal. Si le projet se compile sans erreur et que j'ai une interface qui fonctionne, c'est tout ce qui m'intéresse. C'est le fonctionnel qui m'importe, pas l'aspect visuel.

  • # Framework

    Posté par  (site web personnel) . Évalué à 1. Dernière modification le 09 février 2021 à 12:04.

    Maintenant, il me faut passer à des applications graphiques avec boutons, zones de texte, tout ça…
    

    Tu ne précises pas quel framework tu veux utiliser pour ce faire.

    Il y a en plusieurs en fonction de ton look/cible:
    - WinForms (look historique "Windows 9x") présent depuis .NET Framework 2.0/Mono 2 ;
    - WPF (look "Office 2007") présent depuis .NET Framework 3.0 ;
    - GTK# (utilise GTK+2) ;
    - …

    Quand j'étais actif dans le domaine, Mono supportait WinForms et GTK# mais pas WPF, et MonoDevelop n'avait aucun designer GUI viable (il fallait un outil externe).
    Anecdote : MonoDevelop lui-même est en GTK#.
    J'ignore totalement ce qu'il en est de .NET Core.

    • [^] # Re: Framework

      Posté par  . Évalué à 2.

      Tu ne précises pas quel framework tu veux utiliser pour ce faire.

      Visiblement, je vais devoir travailler avec Winforms. Si j'ai bien compris, c'est donc bien pris en charge par Mono, c'est ça?

      • [^] # Re: Framework

        Posté par  (site web personnel) . Évalué à 0. Dernière modification le 09 février 2021 à 16:52.

        Mono le fournit bien depuis longtemps (c'est les paquets mono-winforms ou libmono-winforms).

        J'ai retrouvé l'outil dont je parlais ; il s'agit de WinForms Designer que j'ai retrouvé dans mes archives sous le nom de mono-mwf-designer . De mémoire, il est compliqué à builder ; fais-moi savoir si tu n'y arrives pas et je t'enverrai une version.

        • [^] # Re: Framework

          Posté par  . Évalué à 2.

          Merci, je me rapproche du but :-) . À ce que je comprends la solution c'est de compiler depuis les sources.

          En revanche, je n'ai jamais tenté de compiler des paquets depuis une autre distribution que Gentoo. Donc tant qu'à compiler, mono-develop depuis son dépôt est-il une option valide?

          • [^] # Re: Framework

            Posté par  (site web personnel) . Évalué à 1. Dernière modification le 09 février 2021 à 18:42.

            Pas sûr que je pige bien, alors je fais un double shot:
            - L'outil se builde en ligne de commande (Makefile/monoc) sans MonoDevelop. De mémoire, il était chatouilleux sur la version de Mono présente, il lui fallait pas forcément la dernière ;
            - MonoDevelop lui-même, j'ai toujours installé son paquet, jamais compilé.

            Pour t'épargner une prise de tête, je te file l'outil précompilé.

            • [^] # Re: Framework

              Posté par  . Évalué à 2.

              Super! Merci infiniment, je vais essayer ça…

            • [^] # Re: Framework

              Posté par  . Évalué à 3.

              Là par contre, c'est moi qui pige pas ce que tu m'as envoyé. Ce sont des exécutables Windows, à ce que je vois, exact?

              • [^] # Re: Framework

                Posté par  (site web personnel) . Évalué à 1. Dernière modification le 10 février 2021 à 11:49.

                Ah ouais, on découvre vraiment, à ce que je vois ;) ?

                mono <fichier>.exe

                • [^] # Re: Framework

                  Posté par  . Évalué à 2. Dernière modification le 12 février 2021 à 10:46.

                  Ben… oui, je pars de zéro, quoi. Quitte à me faire passer pour un gros boulet en posant la question: qu'est-ce que je suis supposé faire avec cette archive et les fichiers qui s'y trouvent?

                  • [^] # Re: Framework

                    Posté par  (site web personnel) . Évalué à 0.

                    J'en déduis que tu n'as jamais compilé avec Mono, ce qui me dérange moins que tu n'aies pas saisi l'indice laissé en police code ;).

                    Les exécutables produits par Mono portent l'extension .exe, les bibliothèques .dll ; ce n'en sont pas pour autant des exécutables Windows (=PE), ni même Linux (=ELF) ; mais .NET CIL, çàd cross-platform.
                    Tu pourrais retirer l'extension, qui est surtout utile pour l'association MIME avec l'interpréteur Mono -utilisée au double-clic ou via le lanceur GNOME/KDE, à la manière du .jar de Java :

                    java -jar <fichier>.jar

                    et maintenant je pense que tu as saisi l'indice ;).

    • [^] # Re: Framework

      Posté par  . Évalué à 3.

      Le look de WinForms peut-être changé radicalement, bien que ça prenne beaucoup d'efforts.
      Voir le projet DarkUI sur GitHub.

      Quant au look de WPF, il est fait pour être changé facilement.
      Des projets tels que ModernWpf ou AdonisUI lui font passer de son look 'Vista' à un look d'application ModernUI (Windows 10).

      J'ai fait perso l'inverse, un projet WPF qui avait un look 'Windows 95' juste pour le fun (c'est un des thèmes présents nativement avec WPF, mais il faut l'activer 'à la main').

      "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

      • [^] # Re: Framework

        Posté par  (site web personnel) . Évalué à 1.

        Alors ça, c'est intéressant !
        Tes projets WPF étaient-ils cross-platform et si oui, quel implé WPF utilisais-tu sur macOS/Nunux (j'ai pas regardé depuis Mono 3.10) ?

        • [^] # Re: Framework

          Posté par  . Évalué à 3. Dernière modification le 10 février 2021 à 22:30.

          Pardon, j'ai cliqué sur inutile ! Je voulais cliquer sur pertinent !
          Un modo peut-il passer réparer cela svp ?

          Utiliser WinForms ou WPF en fait forcément un projet lié à Windows, même si WinForms et WPF sont désormais libres et open-source (en tant qu'add-on pour Windows à la base multiplateforme Linux/Mac/Windows qu'est .NET Core 3.1, désormais nommé .NET 5 pour la dernière release à ce jour).

          Ils sont très liés aux APIs natives Win32, Direct3D9, WISP (API pour les écrans tactiles), Direct2D, GDI+, etc. …

          C'est vrai pour mes projets, c'est vrai aussi pour les projets apportant des thèmes graphiques tels que ModernWpf ou AdonisUI ou DarkUI.

          A la limite, on peut dire multiplateforme Windows pour certains (vu que j'utilise le support de Windows 10 pour les thèmes - pour déterminer si je m'affiche en thème Light ou Dark - s'il existe dans certains projets. Mais si ça n'existe pas (Windows 8 et antérieur), je m'affiche quand même).

          Évidemment, le support des plateformes Windows antérieurs à Windows 10 reste propre à l'historique .NET Framework et ses implémentations propriétaires de WinForms et WPF.

          Bref, si on veut du vrai multiplateforme (et toujours en .NET Core), il y a AvaloniaUI qui est la meilleure option pour le desktop.

          Le backend sous Windows est justement WPF.
          Pour Linux, c'est GTK 3.
          Mais dans tous les cas, le rendu est le même.

          Il y a d'autres options (Bientôt .NET MAUI, mais le support Linux sera 'communautaire', et c'est la suite de Xamarin Forms un truc bof orienté mobile au départ), ou Uno (pas testé), ou Blazor (on peut faire des apps PWA avec par exemple, ou hoster Blazor WASM au sein de WebWindow2 mais c'est expérimental).

          Bref, y'a l'embarras du choix : AvaloniaUI ou des trucs expérimentaux. :)

          (Quant à faire fonctionner .NET Core sous FreeBSD ou autre, c'est une question de bras)

          "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

          • [^] # Re: Framework

            Posté par  (site web personnel, Mastodon) . Évalué à 3.

            La modération (qui est mixte) ne peut pas corriger les erreurs de pertinentage. Mais on peut cliquer sur pertinent pour compenser.

            « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

          • [^] # Re: Framework

            Posté par  (site web personnel) . Évalué à 0. Dernière modification le 11 février 2021 à 11:31.

            Utiliser WinForms ou WPF en fait forcément un projet lié à Windows

            En fait, et comme marqué ci-dessus, Mono fournit une implémentation multi-plateforme de WinForms.
            Ce n'est par contre pas le cas pour WPF, d'où ma question. J'avais cherché sans succès à l'époque, tu m'apprends que ça n'a pas bougé.
            Parmi les frameworks que tu cites, cela exclut mécaniquement ModernWpf/AdonisUI sous Nunux ; la chose est moins claire pour DarkUI (WinForms), où le dév a pris la peine de créer une section "win32", mais sans la rendre optionnelle dans le Makefile (un taf faisable, en tenant compte des spécificités de mono-winforms ?)

            Dans tous les cas, je t'accorde que j'ai cité ci-dessus ne marche qu'avec Mono ; peut-on porter vers .NET Core ? La réponse est sûrement "mais oui, avec un taf conséquent" ;).

            Bref, si on veut du vrai multiplateforme (et toujours en .NET Core), il y a AvaloniaUI qui est la meilleure option pour le desktop.
            Le backend sous Windows est justement WPF.
            Pour Linux, c'est GTK 3.

            C'est ce que je retiens ; j'ai été voir AvaloniaUI, c'est plutôt joli et dans l'air du temps.

            la suite de Xamarin Forms un truc bof orienté mobile au départ

            Ne parlons surtout pas de Xamarin Forms ;).

            En tout cas, je te remercie d'avoir pris le temps d'écrire tout ça ! Il est clair que tu suis le sujet de près, je me permettrai de te piquer les réfs si je bois rebosser avec :).

            • [^] # Re: Framework

              Posté par  . Évalué à 3. Dernière modification le 11 février 2021 à 17:24.

              Si Mono fourni une implémentation compatible de WinForms, ça devrait fonctionner je pense. Mais je n'ai pas testé.

              Le but de .NET 5 (et le futur .NET 6) est de laisser tomber netstandard et le fait d'avoir plusieurs implémentations de .NET (.NET Framework, .NET Core, Mono, CoreRT, .NET Native, …) et de réunir tout le monde sur une seule implémentation (.NET 5, 6, 7, …). Et il y arrive.

              Ça porte déjà ses fruits en termes de perfs et de fiabilité pour Blazor WASM (qui en .NET Core 3.X utilisait Mono).

              Donc je ne sais pas si à l'avenir Mono sera toujours maintenu.

              Par contre, le port Mono de WPF est au point mort depuis toujours.

              J'ai oublié de citer quelques petits projets qui tentent aussi de proposer un SDK multiplateforme pour les UI (surtout parce qu'ils sont très méconnus ou en version alpha) - liste non exhaustive:
              ImGui.NET (a l'air pas mal mais très réduit)
              Modern.Forms - version pré alpha d'un 'sucesseur' à WinForms en .NET Core, pour ceux qui veulent contribuer uniquement…

              "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

              • [^] # Re: Framework

                Posté par  (site web personnel) . Évalué à 1.

                Tu es au taquet :).

                Le but de .NET 5 (et le futur .NET 6) est de laisser tomber netstandard et le fait d'avoir plusieurs implémentations de .NET (.NET Framework, .NET Core, Mono, CoreRT, .NET Native, …)

                Effectivement, ça commençait à être un peu le boxon ; on se serait cru chez Java ;).

                Alors j'ai regardé le SDK .NET 5.0 ; et en téléchargeant les versions Linux/Mac, je constate que le sous-répertoire "shared/Microsoft.WindowsDesktop.App", contenant entre autres "System.Windows.Forms.dll" en est absent.

                C'est donc un pas dans la bonne direction, si tout le monde peut avoir la même organisation de binaires provenant de la même source, il reste la couverture d'API qui est différente.
                Une possibilité serait donc de fournir des implés UNIX de WPF/WinForms sur cettte 5.0.x, encouragé par l'idée de prendre le "best of Mono", et en commençant par ici.
                Ça reste un taf conséquent, l'implé Mono historique tourne (quoique basée sur cette vieille carne de X11), et perso aucun client ne me le demande (du .NET plus récent).
                Je laisse quand même ça ici au cas où ;).

  • # vscodium vs vscode

    Posté par  . Évalué à 5.

    Je voudrais débuter en C# mais pas avec VSCode — usine à gaz, trop lent, trop compliqué, pas confiance, pas pour moi.

    vscodium est la version libre de vscode (en gros sans la surcoupe microsoft, la télémétrie, etc)

    une fois installé l'un ou l'autre, commence par aller dans le magasin de plugin pour désactiver tout ceux dont tu n'as pas besoin et qui sont presents par defaut.

    ensuite cherche et installe ceux nécessaire à C#

    • [^] # Re: vscodium vs vscode

      Posté par  . Évalué à 2.

      Attention, les extensions disponibles pour VSCode ne le sont pas forcément pour Codium (ou Eclipse Che, GitPod, etc.).

      • [^] # Re: vscodium vs vscode

        Posté par  . Évalué à 2.

        toutafais,

        ici j'ai par exemple vu que l'extension plateform.io n'est disponible que dans le store de vscode

        pourtant, avec les deux applis configurées pour pointer sur le meme dossier de configuration (oui je suis fou), l'extension fonctionne sur vscodium

  • # Oui, mais quel toolkit ?

    Posté par  . Évalué à 3.

    Tu as mono-develop, sans doute dans les dépôts mono.
    1) installation de mono, le runtime / vm
    2) installation mono-develop, l'ide
    3) choix d'un framework supporté (winforms, gtk#)

    .NET core est un runtime / vm, nativement utilisable, qui emmpaquete ton code et ses nugets.
    .NET core supporte d'autres frameworks (mais ca depend de la plateforme… Winforms n'est pas dispo sur Linux)
    .NET core peut s'utiliser par mono-develop.

    Pour ta mission le plus simple reste mono-develop avec GTK# qui comporte de mémoire un designer, mais c'est galère pour la portabilité vers Windows (puisque GTK# sera aussi à installer sur Windows ensuite). Et tu restes sur une vieille techno (mono c'estl'équivalent des .NET Framework 4.x).

    • [^] # Re: Oui, mais quel toolkit ?

      Posté par  . Évalué à 2.

      Je ne trouve ni "monodevelop" (comme je l'ai dit dans mon premier post) ni "mono-develop" (avec un trait d'union) dans le dépôt Mono — j'ai vérifié plusieurs distributions sous https://download.mono-project.com/repo/ubuntu/dists/. Et mes recherches avec trait d'union retombent toutes sur "monodevelop". Je suis un peu dans l'impasse là. Un guide ou un tuto applicable à Linux Mint 20 m'aiderait beaucoup.

      Je n'ai pas besoin de portabilité avec Windows, c'est juste pour tester/vérifier des exercices de base en programmation avec Winforms. Ceux qui sont sous Windows les testent avec Visual Studio [Code].

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.