Présentation Mono-Project [07/01/09] - Dotnet-France

secrettownpanamanianΚινητά – Ασύρματες Τεχνολογίες

10 Δεκ 2013 (πριν από 3 χρόνια και 8 μήνες)

97 εμφανίσεις










Présentation Mono
-
Project


Z














Dotnet France Association




2

Présentation Mono
-
Project [07/01/09]



Sommaire




1

Introduction à Mono

................................
................................
................................
.......................

3

1.1

Qu’est
-
ce que Mono

?

................................
................................
................................
.............

3

1.2

Quelle est l'étendue de Mono?

................................
................................
...............................

3

1.3

Pourquoi Mono?

................................
................................
................................
......................

5

1.4

Mono est il vraiment utilisé?

................................
................................
................................
...

5

1.5

À quoi ce tutoriel devrait nous mener?
................................
................................
...................

5

1.6

Pourquoi Winform et GTK#?

................................
................................
................................
...

6

1.6.1

GTK#

................................
................................
................................
................................

6

1.6.2

WinForm

................................
................................
................................
..........................

6

2

Installation/mise à jour de Mono

................................
................................
................................
....

7

2.1

Paquets:

................................
................................
................................
................................
...

7

2.1.1

Ubuntu/Debians:

................................
................................
................................
.............

7

2.1.2

OpenSuse, Rpm

................................
................................
................................
...............

8

2.2

Windows

................................
................................
................................
................................
..

9

2.2.1

Mac

................................
................................
................................
................................

10

2.3

SVN

................................
................................
................................
................................
........

11

3

Conclusion

................................
................................
................................
................................
.....

12








Dotnet France Association




3

Présentation Mono
-
Project [07/01/09]

Ce chapitre est une introduction qui reste
détaché
e

du domaine technique, la première partie est
une approche culturelle de Mono, et présente un peu plus finement les outils que l’on étudiera dans
ce tutoriel. La deuxième vous présentera comment installer Mono et la conclusion expliquera
l’utilisa
tion du logiciel fraichement installé.

1

Introduction à Mono

1.1

Qu’est
-
ce que Mono

?

Mono est une application initiée par Miguel de Icaza.

Miguel de Icaza est fondateur de Gnome et d’une société
(Ximian) rachetée par
Novell

(
en savoir plus
). Miguel est
désormais employé chez Novell et est persiste principal de
Mono. Cette application est un interpréteur

de langage
intermédiaire .Ne
t (MSIL

: Microsoft Intermediate Language).
Au
-
delà de ça, le projet mono embarque un ensemble d’outils
liés au même titre que le framework .NET.


Le
MSIL

est un langage intermédiaire qui est non pas
notre source. En java par exemple
,

le langage intermédia
ire est
appelé bytecode. Le MSIL revient à une source semi
-
compilée
indépendante du langage utilisé
. Comme le montre l’image ci
-
contre, les applications sont potentiellement les même
s

et ne
nécessitent du coup pas de recompilations pour passer d’un
environ
nement à l’autre.



Le projet Mono contient des outils tels que (non exhaustif)
:



Une ma
chine virtuelle du langage intermédiaire (CLI)

;



Un chargeur de classes

;



Un
Just
-
in
-
time compiler (JIT);



Un g
arbage collect
or (ce mot est expliqué dans le cours C# de d
otnet
-
France)

;



Un compiler C# et un VB.NET.
I
ls
travaillent pour

ajouter des compiler
s

d’autres langages vers
MSIL
.

(Java, Boo…)
.


Le projet Mono a
aussi

des librairies faites pour simplifier les appels vers des API (Application
Programmable Interface) de bibliothèques ou programmes existants. Ces ensemble
s de fonctions de
communication

avec des APIs sont

appelés des «

binds

» car il
s servent de lien
s

entr
e nos
programmes et les API («

to bind

» = «

lier

»).


Mono a pris son envol quand Microsoft a publié les spécifications du framework .NET 1.1 pour le
normaliser au près de l’ECMA. Cette publication a offert aux développeurs de mono une base de
travail po
ur implémenter le Framework.

1.2

Quelle est l'étendue de Mono?

Mono est vaste, il cherche plus ou moins à implémenter toutes les technologies présentes
dans le framework .NET. Par exemple la partie WinForm (applications fenêtrées), tous les contrôles
du framew
ork 2.0 sont implémentés de manière compatible dans Mono. Pour ce qui est des
applications .NET à faire tourner sous Mono, avo
ir une version à jour augmente

vos chances de
succès car les implémentations de contrôles et objets sont progressives. Mono implém
ente Linq
(pour faciliter l'accès aux données) qui est une nouveauté du framework 3.5 alors que certaines
parties du framework 3.0 ne sont pas encore implémentées (on regrettera par exemple que l'ajax
control toolkit librairie pour le framework 2.0 n'ait q
u'une compatibilité limitée avec Mono WebForm
et l’absence des WebPart).





Dotnet France Association




4

Présentation Mono
-
Project [07/01/09]


Mais c'est un projet plus ambitieux qu’une pâle copie. La communauté ajoute ou implémente
des technologies/API pour étendre les possibilités du framework Mono. L’exemple d’implément
ation
d’API le plus connu est GTK#. Il «

Bind

» une des principales bibl
iothèques graphiques disponible

notamment sous Linux, Mac, et Windows appelée GTK (GIMP Tool Kit
-
> GNU Image Manipulation
Program Tool Kit). On peut donc faire aussi des applications
Linux intégrées avec Mono et les porter
sous Windows® en utilisant cette bibliothèque (nécessite l'installation de la bibliothèque et de .NET
1.1 ou Mono sous Windows®). Ils ont implémenté Cocoa (la bibliothèque graphique de MacOS X)
sous le nom de cocoa#
et des applications comme avec le bind Gecko# pour afficher des pages web
(
en: Librairies Mono

).



Un outil de Mono nommé XSP sert à faire du
WebForm. XSP

est l’équivalent de cassini, des serveurs httpd
simples à part entière.

U
tilisé
avec «

apache
-
mod
-
mono

»
,

Mono permet

d’héberger un site Webform avec Apache à la
manière de IIS p
our l’ASP.NET. MonoDevelop 1.0 n’a

ni
interface design wysiwig (
What You See Is What You Get)
,

ni
l’auto
-
complétion pour la syntaxe ASP mais l’auto
-
complétion XML/ASP sera implémenté
e

d’ici Mars 2009 avec
Monodevelop 2.0 si les délais sont tenus. La compatibilité
avec les contrôle
s

Webform Microsoft est encore à
travai
ller, mais certains sites de qualité ou CMS utilisent
Mono

en production (
Jap

: T
raducteur anglais japonais
Mono
,
Site à interface moins bluffante mais plus
prof
essionnelle
,
mojoportal

:

CMS opensource

).


Pour finir sur l'étendue de Mono
,

on peut préciser que des projets de portages ont étés
réalisés que ce soit sur la PS3 avec celldotnet (
en:c'est quoi celldotnet?
) ou Unity3D pour pas mal de
plates
-
formes dont récemment la Wii (
Arti
cle
) et l’Iphone.

Ce schéma présente de manière non exhaustive les technologies implémentées dans le projet Mono.

Mono
-
Project
(2.4)
.Net1.1

(Presque Tout)
.NET2.0

WinForm

ADO.NET

Webservices

ASP (sauf WebParts)

System.drawing

System

System.Data
.NET3.5

Linq 2 XML

ASP 3.5 (sauf MVC)

Linq 2 Object
Silverlight

Moonlight (
béta )

Moonshine
Langages

C#3.0

VB.NET8

Boo

IKVM (Java)

IronPython...
Communauté

GTK#

Cocoa#

MoMA

Gecko#

Cairo#

SIMD

gsharp

MonoDevelop

...




Dotnet France Association




5

Présentation Mono
-
Project [07/01/09]

1.3

Pourquoi Mono?

Mono est un portage du framework .NET permettant l'intégration aux systèmes non
Windows® notamment MAC, Linux et BSD. Mono exi
ste sous Windows® et a rendu certains de ses
binds compatibles avec le framework .NET 1.1 (on peut par exemple installer GTK# sous Windows®
sans y installer Mono)

mais aussi 2.0 depuis peu
. Mono permet de lancer certains exécutables .NET
générés par Visual

Studio sans même recompiler
,

pour cela il suffit que cet exécutable n'utilise que
des fonctions .NET implémentées. L’équipe du projet Mono essaye de résoudre les problèmes
d'interopérabilité du framework .NET en offrant une alternative de développement po
ur Linux qui se
limitait alors à peu prêt au C/C++, Python, Perl et au java (ce dernier étant plus gourmand en
mémoire et moins intégré avec les bibliothèques du bureau). Cette alternative est née avec le mérite
de pouvoir laisser aux développeurs leur lan
gage de programmation préféré (ex:IronPython), la
possibilité de collaborer avec des gens qui développent avec un autre langage (ex:C#) et de pouvoir
faire avec tout type d'applications (web services, site, application client...) en développant
rapidement
et en toute simplicité.

1.4

Mono est il vraiment utilisé?

L'environnement de bureau le plus utilisé
sous GNU/Linux (gnome) a mono par défaut, des
applications GTK# de qualité y sont intégrées que
ce soit le gestionnaire de photos (F
-
Spot) ou l’outil
de prise

de notes (Tomboy). D'autres applications
GTK# sont populaires chez les amateurs de Gnome
comme un
outil
d'indexation
des fichiers
(Beagle), un
lecteur audio (banshee ci
-
dessus), l'IDE du projet Mono
(MonoDevelop), certaines applications professionnelles
(
en:Gestion Patients Hôpitaux

OpenVista ci
-
contre en GTK#
sous Windows).



Certaines association
s

ou entreprises de renom utilisent Mono. Bien sur Novell mais aussi
Wikipedia et Second
-
Life (pour les plus fameux, pour en savoir plus,
en: Sociétés utilisant Mono

).

La licence plus permissiv
e fait que certaines personnes utilisent Mono plutôt que .NET.


Bien que je n'ai pas trouvé de r
éels comparatifs de performance

entre les deux framework,
dans l’ensemble Mono serait généralement moins performant que le framework

.NET mais c’est le
coû
t de

la liberté, la portabilité et la largeur de la base.

1.5

À quoi ce tutoriel devrait nous mener?

Ce tutoriel va vous présenter des outils intéressants de Mono et vous apprendre à vous servir
de certains d'entre eux. Nous vous présenterons l'interface
MonoDevelop, nous vous montrerons
GTK#, les outils pour faire du WinForm sous Mono (les connaissances à avoir étant les même
s

que
pour le Framework .NET pour avoir une meilleure maîtrise il vous sera suggéré de lire les tutoriels
WinForm de dotnet
-
france),

puis au final comment porter un projet WinForm réalisé sous Windows®
avec l'outil de portage MoMA (Mono Migration Analyser)
.







Dotnet France Association




6

Présentation Mono
-
Project [07/01/09]

1.6

Pourquoi Winform et GTK#?

1.6.1

GTK#

Le GTK# est un ensemble d'objet
s

et de méthodes pour faire des appels à l'API GTK+, cet
ensemble

est par défaut avec Mono mais s'installe facilement sous Windows et fonctionne avec le
framework .NET. Beaucoup d'applications communautaires de renom utilisent GTK# notamment
Banshee, Tomboy ou MonoDevelop. Certaines de ces applications sont par défaut d
ans pas mal de
distributions gnome (Ubuntu, OpenSuse...) ce qui assure une certaine pérennité à la bibliothèque.
MonoDevelop intègre un outil graphique pour générer des fenêtres en GTK# avec une interface
simple (capture ci
-
dessous). Cet IDE est le plus ut
ilisé pour les applications Mono et fait partie du
Projet,
i
l a des garanties de maintien du fait qu’il ait le soutien de la communauté et de Novell.



Avantages

:

o

L'API (Application Programing
Interface) GTK est écrite en C ce
qui améliore les

performances

;

o

Bonne intégration avec les
outils d'accessibilité (lecteurs
d'écran)

;

o

Les redimensionnements de
textes (pour les traductions ou
les changements de polices) ne
nuisent pa
s à l'esthétique de
l'interface

;

o

Intégration directe avec
l'environnement

de bureau

Gnome

;

o

Large Communauté GTK+

;

o

Compatible Windows®

;

o

L'
API est assez stable à ce stade

;

o

Très bon support de l'Unicode
.



Inconvénients

:

o

Documentation assez incomplète

;

o

Le DataBind (fait de lier directement des champs de contrôles ou des contrôles à des
bases de données) n’est pas implémenté dans les contrôles par défaut.

1.6.2

WinForm

Le choix du WinForm s'inscrit dans une démarche d'interopérabilité avec Windows et prendra
son intérêt pour le dernier chapitre avec MoMA qui montrera comment migrer une applicat
ion
WinForm dans Mono.

C'est un Tool Kit utilisé par des millions de développeurs Windows
,

notamment pour des
applications inter
nes d'entreprise. Le Winform était

implémenté dans Mono pour permettre le
portage de ces applications sous Linux.

En .NET, les
WinForms appellent l'API Win32 tandis que Mono implémente une librairie type
Win32 plus restreinte. Il arrive (notamment pour les contrôles tiers non supportés) qu'il y ait des
appels direct
s

à l'API qui ne fonctionnent pas avec Mono. La plupart des logici
els WinForm sont
développés avec Visual Studio ou SharpDevelop
,

qui ont des constructeurs de fenêtre
s

graphiques.
Cette API très populaire grâce au monopole de Windows a quelques avantages et inconvénients.




Avantages

:

o

Beaucoup de Documents traitant de
WinForm

;

o

Large communauté

;

o

Méthode la plus simple pour avoir une application compatible Windows® sans
installations complémentaires.



Inconvénients

:





Dotnet France Association




7

Présentation Mono
-
Project [07/01/09]

o

Pas très élégant sur les plates
-
formes non Windows®

;

o

Les éventuels extraits de codes
appelant
s

l’API Wi
n32 ne sont pas
portables

;

o

L'outil Mono pour créer graphiquement
des fenêtres n'est ni
stable ni intégré à
MonoDevelop

;

o

Encourage l'utilisation d'installation SVN
de Mono pour une meilleure
compatibilité et pour profiter des
dernières versions des outils

qui sont
encore en développement (pour utiliser des éléments pro
pre au framework 3.0
notamment)

;

o

Sous Unix, les contrôles Winform de navigation dans l’arborescence des fichiers ne
permettent pas d’entrer dans des liens symboliques
.

2

Installation/mise à jo
ur de Mono

I
l y a deux types d'installation
:



Une simple, stable, optimisée pour votre système d’exploitation ou à votre distribution mais
avec une méthode d’installation en dépendant. (Paquets)



Une plus longue, plus complexe et avec moins de garanties de s
tabilité. (serveur de
développement)


La méthode package (1ère) est recommandée pour les installations rapides, pour sa distribution
ou sa plateforme. La compatibilité est garantie avec les applications mono proposées sur les serveurs
de paquets pour ceux
qui utilisent un gestionnaire de paquet
s

(Yast, Aptitude, Urpmi …). Il existe
pour certaines distributions
,

des serveurs plus à jour non officiels pour bénéficier de quelques
avantages liés au fait d'être à jour.

2.1

Paquets:

Les systèmes de paquetage
variant

un peu d'un système à l'autre, je vais présenter deux des
principales distributions linux client, Windows et Mac.

2.1.1

Ubuntu/Debians:

(
Télécharger Ubuntu

)

Pour les utilisateurs d'Ubuntu sans mono vous
pouvez l'installer depuis un terminal

:

sudo aptitude install mono
-
common


Pour les utilisateurs de la version 8.04, exécutez cette commande pour ajouter le dépôt et
mettre à jour mono (utilisateurs d’ubuntu 8.10remplacez hardy par intrepid):

echo
"deb
http://ppa.launchpad.net/mono
-
edge/ubuntu/ hardy main universe
multiverse restricted"

| sudo tee
-
a /etc/apt/sources.list && sudo aptitude
update && sudo aptitude upgrade







Dotnet France Association




8

Présentation Mono
-
Project [07/01/09]

2.1.2

OpenSuse, Rpm

(
Télécharger OpenSUSE
)

Comme on aurait pu faire sous
Ubuntu, je vais cette fois vous
proposer la méthode graphique avec
OpenSuse 11.




On ouvre le gestionnaire de paquet
dans le menu Ordinateur.




On sélectionne tous les dépôts
-
> ajouter ou supprimer...

On vérifie que ce
dépôt soit sélectionné.


Ensuite sélectionnez vos paquets et cliquez sur installer, puis
«

Appliquer

»
.







Dotnet France Association




9

Présentation Mono
-
Project [07/01/09]

2.2

Windows

(Dans le cas ou vous utilisez une version Windows Millenium ou antérieure de Windows vous
aurez besoin de cette
Librairie de compatibilité

)
.

Il est possible d’installer mono sous Windows bien que le réel framework .NET y existe, je vais
répondre à la question

: pourquoi Mono sous Windows

?



Pour essayer ses projets compilés avec Visual

Studio par exemple sur le framework Mono
(Pour être sûr que des utilisateurs de Mac, Linux, Solaris puissent essayer le logiciel sans
toucher une ligne de code)
.



Pour permettre aux développeurs de Mono d’observer les parties non portables du code et
d’amé
liorer les lacunes du framework.



La moitié des contributeurs au projet Mono sont sous Windows, le fait de pouvoir l’utiliser
depuis Windows leur évite d’avoir à migrer sous une plateforme Unix.



Permet de lancer des applications Mono sans avoir installé de
version récente du
framework.NET en

général par simple «

copier coller

»

de la solution compilée.

L’installeur contient GTK#, XSP, et le framework Mono.

Le menu
«

démarrer

»

se dote de quelques entrées dans un répertoire Mono.


Astuce

à réaliser avec préca
ution
, une manipulation hasardeuse des variables d’environnement
peut nuire à la stabilité de votre système
:

Comment

pouvoir appeler mono depuis n’importe quelle
invite de commande

sous Windows

:


-

Click droit sur le «

Poste de travail

»


«

Propriétés

»


onglet «

Avancé

»


bouton
«

Variables d’environnement

»


sélectionnez la Variable Système «

Path

»


Attention

:
Ajoutez à
la valeur en fonction

«

;

» (pour s
éparer les champs d’adresse) suivi du répertoire bin de Mono (par
défaut

: «

C:
\
Program Files
\
Mono
-
2
.
2
\
bin

»).









Dotnet France Association




10

Présentation Mono
-
Project [07/01/09]

Comment configurer un terminal sous Windows

:


-

Pour les terminaux Windows, sur la barre de titre du
terminal, faites clic droit, propriété, vous pourrez configurer un peu
votre terminal, la police, les couleurs, la largeur… Ainsi
vous pourrez
profiter de la largeur de votre écran, choisir une police plus grosse ou
même des couleurs plus avenantes.










2.2.1

Mac

Peu d’impressi
ons d’écran

seront
réalisées sous

MacOS mais l’utilisation reste la
même.


Dans un premier temps il faut
télécharger

l’application (Notez que depuis l’impression
d’écran, le site a été mis à jour et qu’il propose
mono 2.0).




Ceci fait on peut constater qu’installer Mono sous mac
c’est aussi si
mple que sous Windows. Notez qu’un
autre paquet sur la même page est disponible pour
installer MonoDevelop 1.9.




Vous constaterez peut être si vous voulez
désinstaller Mono après coup que la procédure n’est pas aussi guidée. Si vous avez à le désinstalle
r,
vous trouverez la façon de faire sur ce site en anglais (
en: désinstaller Mono sur Mac
) espérons que
pour la version suivante la procédure soit plus intuitive…







Dotnet France Association




11

Présentation Mono
-
Project [07/01/09]

2.3

SVN

Il y a quelques arguments qui
puissent vous pousser à vous compiler Mono depuis le SVN:



Utiliser Mono sur un OS ou une distribution où il n'est pas packagé

;



Être très à jour

;



Essayer des Patch

;



Contribuer au projet Mono

;



Utiliser certains composants non packagés (4 composant
s

sur 2005 accessibles uniquement
par SVN à ce jour)
.

Pour Ubuntu, vous aurez probablement à résoudre des dépendances et à installer subversion:

sudo aptitude install build
-
essential bison libglib2.0
-
dev subversion libpng12
-
dev libcairo2
-
dev libtool automak
e


Dans le cas où vous auriez OpenSuse avec le méta
-
paquet (ensemble de dépendances
n’
installant

rien de plus) de développement .NET proposé à l'installation, vous devriez avoir tout le
nécessaire pour lancer le script sans installer quoi que ce soit de p
lus.


#! /bin/sh


cd ~
#vas dans votre home directory

mkdir mono
-
svn
#crée un dossier "mono
-
svn"


cd mono
-
svn
#y rentre


(svn co svn://anonsvn.mono
-
project.com/source/trunk/mono)&

(svn co svn://anonsvn.mono
-
project.com/source/trunk/libgdiplus)&

(svn co
svn://anonsvn.mono
-
project.com/source/trunk/gtk
-
sharp)&

(svn co svn://anonsvn.mono
-
project.com/source/trunk/mcs)
# télécharge les
dernières sources en multithread

echo
"chargement complet"

#affiche qu'il a fini de télécharger les sources


echo
"cd ~/mono
-
s
vn; (cd libgdiplus; svn update)&;(cd gtk
-
sharp; svn update)&;(cd
mono;svn update); (cd mcs; svn update); cd mono; ./autogen.sh
--
prefix=/usr/local; make; make install; cd ~/mono
-
svn/libgdiplus; ./autogen.sh
--
prefix=/usr/local; make; make install; cd ../gt
k
-
sharp; ./autogen.sh
--
prefix=/usr/local; make; make install"

> update.sh

#crée un script update.sh

#il met
à

jour et compile les répertoires.

#(la compilation du répertoire mono compile le répertoire mcs)


echo
"cd ~/mono
-
svn/mono; make uninstall;cd ../
libgdiplus ; make uninstall; cd
../gtk
-
sharp; make uninstall"

> uninstall.sh
# crée un script de désinstallation.

chmod a+x update.sh
#donne les droits d'exécution

chmod a+x uninstall.sh
#donne les droits d'exécution

echo
"script de mise à jour et compilat
ion généré"

#affiche que le script est
fonctionnel

cd mono; ./autogen.sh
--
prefix=/usr/local
# l’exécution du script autogen.sh
contrôle votre système et le respect des dépendances puis défini les variable
d'environnement pour la compilation

make; make install
#compile puis installe mono

cd ~/mono
-
svn/libgdiplus; ./autogen.sh
--
prefix=/usr/local; make; make install
#
pareil pour libgdiplus

cd ~/mono
-
svn/gtk
-
sharp; ./autogen.sh
--
prefix=/usr/local; make; make install
#
pareil pour gtk
-
sharp


Pour comprendre ce script d'installation
,

je vous invite à lire les commentaires.





Dotnet France Association




12

Présentation Mono
-
Project [07/01/09]


Au final après une bonne heure de compilation et autre
s

billevesées,

nous avons 2 scripts (un de
mise à jour et un de désinstallation). Si vous avez oublié des dépendances o
u que vous êtes sous
Mac, ce

script risque de ne pas suffir
, seuls les autogen.sh vous informeront des problèmes de
dépendances. Si le script s’arrête en cas d’erreur
,

finissez la procédure manuellement en résolvant
ces fameux problèmes sans relancer tout
du début à chaque fois.

3

Conclusion

Nous avons donc tous mono d'installé
,

nous avons des connaissances intéressantes sur ce qu'est
ce logiciel, il est fonctionnel mais nous n'avons pas parlé de comment lancer un programme avec...
Voilà qui devrait alimenter

cette conclusion. Mono est un framework et aussi un interpréteur
et
de
ce fait
,

il faut l'appeler pour interpréter les fichiers exécutables associés. On notera que quelque soit
le framework, les log
iciels et bibliothèques compilée
s en MSIL ont par défaut
respectivement des
extensions de fichiers en .exe ou .dll. Pour lancer Programme.exe
,

on le lance avec l'interpréteur
(mono ./Programme.exe). Dans ce cas on a besoin au minimum des droit
s

d’exécution de Mono et de
lecture du programme.


Astuce :

Pour créer

un lanceur dans un dossier de $PATH sans avoir à déplacer, changer l'extension et
en laissant la possibilité de lancer l'exécution avec des arguments
,

créez un script comme suit:


#! /bin/sh

mono /home/user/dev/Programme/Programme.exe
"$@"



Placez ce
script dans /usr/bin/ par exemple (sous le nom de "Prog"), donnez lui les droits
d'exécution. Au prochain chargement de votre shell, vous pourrez appeler l'application par le nom du
script («

Prog

»)


Voilà, il est exécutable sans avoir à préciser l'inter
préteur à chaque lancement.

J’espère que ce chap
itre d’introduction vous a paru

attractif car le prochain devrai
t

être le dernier
sans code ou l’on découvre les outils et le projet Mono.