Nous allons maintenant essayer de voir comment tout cela fonctionne, depuis la création du programme jusqu'à son éxécution.

1. La création du programme

Le programmeur développe son application à l'aide d'un éditeur de son choix, puis compile son application avec la possibilité d'inclure d'autres composants développés dans d'autres langages. Le compilateur génère du code intermédiaire.

 

2. Le déploiement de l'application

L'utilisateur ou l'administrateur va pouvoir effectuer l'installation de l'application par simple copie de fichiers soit dans le répertoire d'éxécution de l'application, soit dans le GAC, soit dans le Download Cache pour les programmes télechargés.

 

3. L'éxécution

Une fois que l'application est installée, on va pouvoir l'éxécuter. Le schéma suivant montre le processus d'éxécution d'un programme .net.

L'éxécution du programme commence par le chargement de l'assembly en mémoire. Ensuite le gestionnaire de sécurité va vérifier les droits d'éxécution paramétrés par la politique de sécurité établie sur la machine. Après cela, le chargeur de classe est appelé pour charger en mémoire les classes dont le programme a besoin, pour les compiler en code natif de la machine, qui sera entièrement controlé par le gestionnaire de code. Ce dernier fait appel à différentes entités pour réaliser sa tache :

- le garbage collector ou ramasse miette. C'est lui qui s'occupe de libérer les zones de mémoires qui ne sont plus utilisées.

- le gestionnaire d'exceptions, pour la gestion des exceptions

- le gestionnaire des threads, pour les programmes multithreadés

- le gestionnaire d'interopérabilité avec les objets COM, pour la communication avec d'anciens programmes distribués

- la machine de debugage

- et enfin le gestionnaire de sécurité. En effet, il est possible de définir des droits d'éxécution explicite sur l'éxécution de certaines portion de code !

 

Cette architecture d'éxécution, semblable à celle de Java, laisse entrevoir un point essentiel et plutot étonnant de la part de Microsoft. Le code que l'on génère est maintenant portable (ou du moins il peut le devenir :-p). En effet, on remaque tout de suite, que le code intermédiaire généré est indépendant du système d'exploitation sur lequel il est utilisé, du moment qu'il existe un CLR pour l'executer. Le seul Hic, est qu'au jour d'aujourd'hui le seul CLR capable de faire tourner des applications avancées, est celui fourni par Microsoft :-(. Cependant, Microsoft a opter pour une politique de standardisation de son architecture en publiant à l'ECMA toutes les spécifications pour écrire un compilateur pouvant générer de l'IL et pour développer un CLR pour d'autres systèmes d'exploitation. On voit apparaitre, aujourd'hui, dans la communauté Linux, un petit nombre de projets qui ont pour but de porter le framework .net sur Linux et autres OS. Ces projets sont :

- Mono, par le créateur de Gnome

- Gnu Portable DotNet

- et Rotor ou plus communément appelé l'implémentation de la CLI (Common Language Infrastructure)