Utiliser un environnement de développement .Net/Mono à jour sous Windows ou Mac OSX est relativement facile, sous Windows on a directement le Framework .Net proposé par Microsoft et sous Mac OSX il y a des paquets officiels pour Mono. Cependant sous Linux c’est différent.. Effectivement le projet Mono est très mal vue pour des raisons plus ou moins discutables et un des plus gros reproche que l’on puisse faire à certaines distributions populaires est de ne pas proposer de paquet à jour. Par exemple sur la dernière version beta d’Ubuntu, Mono est encore en version 2.10 et MonoDevelop en 3.x. Il faut aussi voir que certains utilisateurs ne mettent pas à jour leurs système (Le cas des LTS par exemple) et les ancienne distributions là aussi ne se mettent pas à jour. Pour MonoDevelop c’est la même chose, sous Windows et Mac OSX, il y a des paquets officiels, mais pas sous Linux où il faut se contenter des paquets par défaut qui sont encore une fois peut à jour (voir totalement vieux…). Heureusement certaines distributions telles que Mageia, Arch Linux ou Gentoo proposent des versions à jour via les canaux de mise à jour stable ou testing.
J’ai constaté que beaucoup de développeurs de la communauté .Net/Mono sous Linux utilisaient Ubuntu ou un dérivé d’Ubuntu (j’utilise moi même souvent une Kubuntu). Ainsi je vais vous proposer quelques pistes pour rester un maximum à jour avec votre environnement de développement afin de pouvoir profiter des dernière innovations de Mono et MonoDevelop.
1. La mise à jour de Mono
1.1 Mise à jour sous Ubuntu (PPA)
La première chose à faire est de regarder quelle version de Mono est installée sur votre système pour cela ouvrez un terminal et tapez la commande suivante :
yann@fenixis:~$ mono --version Mono JIT compiler version 3.0.7 (tarball Wed Mar 20 11:53:53 UTC 2013) Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark)
Mise à jour du 19/11/2013 : Un nouveau dépôt est disponible et permet d’avoir Mono 3.2 et MonoDevelop 4.2 en une seule ligne de commande. Il vous faudra (u)buntu 13.04 minimum et 14.04 maximum (on est large jusqu’à la prochaine mise à jour).
sudo add-apt-repository ppa:inizan-yannick/mono sudo apt-get update sudo apt-get install monodevelop
Autre dépot ((u)buntu inférieur à 13.10)
A l’heure où j’écris cet article la dernière version stable de Mono est la 3.2.3 et comme vous pouvez le constater sur mon retour console je suis en 3.0.7. Par défaut sur Ubuntu c’est la version 2.10.x qui est proposée. Vous pouvez mettre à jour votre version via le dépôt PPA suivant :
sudo add-apt-repository ppa:borgdylan/ppa sudo apt-get update && sudo apt-get dist-upgrade
Une fois à jour vous serez enfin sur la branche 3.x et vous pourrez utiliser les dernières fonctionnalités de .Net 4.5 comme par exemple la programmation asynchrone. Vous aurez aussi de meilleurs performances car le runtime Mono gagne en maturité à chaque nouvelle version majeur.
1.2 Mise à jour par les sources
La mise à jour par les sources à l’avantage de vous donner la dernière version, cependant il faut connaître un peu l’environnement car il y des paquets de développement obligatoires à avoir. Pour compiler les sources c’est assez simple, rendez vous sur la page github du projet Mono et suivez les instructions du fichier README.
2. Mise à jour de MonoDevelop 4.x
MonoDevelop est le seul environnement de développement intégré pour faire du C# sous Linux. Il s’améliore lui aussi de version en version et je dois admettre que la version 4.x est devenue agréable à utiliser. Elle est beaucoup plus stable et les outils qui viennent avec sont redoutablement efficaces. Pour MonoDevelop il n’y a pas de paquets magiques alors il faut compiler les sources. Rassurez vous ce n’est pas une tâche complexe, vous trouverez toutes les informations nécessaires sur la page github du projet. Je vous recommande de configurer le script de construction pour que l’installation se fasse dans /opt, cela vous permettra d’avoir la dernière version et la version des dépôts en même temps.
# Récupération des sources et des modules git clone https://github.com/mono/monodevelop.git cd monodevelop git submodule update --init # Construction ./autogen.sh ./configure --prefix=/opt/monodevelop # Remplacez le chiffre 4 par le nombre de coeurs logiques de votre CPU make -j4 sudo make install
Si la commande configure échoue c’est qu’il vous manque un paquet (Gnome-sharp, gtk-sharp2-dev) alors prenez le temps de regarder ce qui manque et faites une recherche dans votre gestionnaire de paquet pour l’installer. Il est probable que vous ayez à installer mono-gmcs et gnome-sharp2.
Pour lancer l’EDI tapez la commande suivante
mono /opt/monodevelop/lib/monodevelop/bin/MonoDevelop.exe
Si vous utilisez KDE comme bureau vous serez victime d’un bug lié au thème oxygen-gtk et vous ne verrez pas votre code dans l’éditeur. C’est un bug déjà rapporté sur le gestionnaire de bug de KDE, il est possible de contourner ce problème en lançant MonoDevelop comme suis :
OXYGEN_DISABLE_INNER_SHADOWS_HACK=1 mono /opt/monodevelop/lib/monodevelop/bin/MonoDevelop.exe
Vous avez désormais la dernière version de MonoDevelop ! Avouez que le look est beaucoup plus agréable que cette vielle version 2 hein 😉
3. Et pour finir MonoGame
Le Framework MonoGame bouge beaucoup et il est préférable de garder une version à jour pour ses développements. Encore une fois il n’y a pas de paquet tout prêt mais la compilation des sources est vraiment facile. De plus sous Linux on a maintenant le choix entre la version OpenTK ou SDL2. Je vous recommande vivement la version SDL2 pour les raisons suivantes :
- Pas de problèmes d’affichage (plein écran, résolution, etc…) ;
- La gestion des pad est fantastique ;
- On peut lire des vidéo en ogv via Theora# ;
- On peut lire des musiques et des sons au format wav et ogg sans passer par des xnb ;
- SDL2 à l’avantage d’être beaucoup plus à jour que OpenTK ;
Cependant il faudra passer par la case compilation des sources de SDL2, SDL2_image et SDL2_mixer et copier les fichiers libSDL2-2.0.so.0 SDL2_image-2.0.so.0 et SDL2_mixer.2.0.so.0 à côté de votre exécutable, sans oublier de copier les fichiers SDL2#.config et Theora#.config. C’est un mal pour un bien croyez moi, une fois que cela est fait vous aurez une version de MonoGame qui fonctionne vraiment sous Linux. D’ailleurs un tas de jeux l’utilise déjà, je citerais FEZ par exemple. Au passage je recommande cette version pour tout vos projets Desktop car avec une seule et même solution vous travaillez en réalité pour 3 plateformes (Linux, Windows et Mac OSX).
3.1 MonoGame standard (OpenTK)
git clone https://github.com/mono/MonoGame.git cd MonoGame git checkout develop git pull origin develop git submodule update --init
Ensuite ouvez la solution MonoGame.Framework.Linux.sln avec MonoDevelop et compilez le projet en mode Release. Les fichiers dll se trouveront dans bin/Linux/Release. N’oubliez pas le fichier opentk.dll.config, il determine le mapping des bibliothèques OpenAL et OpenGL que OpenTK utilise.
3.2 MonoGame SDL2
git clone https://github.com/flibitijibibo/MonoGame.git MonoGameSDL2 cd MonoGameSDL2 git submodule update --init
Là c’est la même chose sauf qu’il faut ouvrir la solution MonoGame.Framework.SDL2.sln, les fichiers DLL se trouverons dans bin/SDL2/Release. N’oubliez pas de récupérer aussi les fichiers SDL2#.config et Theora#.config, ils sont obligatoires car il définissent le chemin des bibliothèques natives à appeler.
Pour le moment la version SDL2 est sur un dépôt à part (c’est un fork) mais sachez qu’il y a actuellement une pull request visant à amener ce port dans la branche officielle de MonoGame. D’ici quelques semaines ça devrait être effectif.
4. Conclusion
Vous voilà totalement à jour normalement, ces opérations ne sont pas à faire tous les jours mais à chaque fois qu’un gros changement aura lieu dans un de ces projets. Être à jour vous permet de profiter de la stabilité et des dernières avancés. Pensez aussi à jeter un œil aux différents forums de discutions en plus des logs de commit afin d’être encore plus à jour sur les choses qui vont arriver prochainement. Enfin voici quelques liens pour finir, à consulter tous les jours (bon ok peut être pas 😉 ).
- Les derniers commits sur Mono
- Les derniers commits sur MonoDevelop
- Les derniers commits sur MonoGame
- Les derniers commits sur MonoGameSDL2
- Liste des pull request sur MonoGame
- Les forums de MonoGame