Vue d'ensemble de la compilation ASP.NET
Mise à jour : novembre 2007
Pour que le code de l'application traite les demandes de service des utilisateurs, ASP.NET doit d'abord compiler le code en un ou plusieurs assemblys. Les assemblys sont des fichiers ayant l'extension .dll. Vous pouvez écrire le code ASP.NET en différents langages, comme Visual Basic, C#, J# et autres. Lorsque le code est compilé, il est traduit en une représentation indépendante du langage et de l'UC, intitulée Microsoft Intermediate Language (MSIL). Au moment de l'exécution, MSIL s'exécute dans le contexte du .NET Framework, qui traduit le MSIL en instructions spécifiques à l'UC pour le processeur de l'ordinateur exécutant l'application.
La compilation du code de l'application présente plusieurs avantages, notamment :
**Performance **Le code compilé est beaucoup plus rapide que les langages de script tel qu'ECMAScript ou VBScript, parce qu'il s'agit d'une représentation plus proche du code machine et ne nécessitant pas d'analyse supplémentaire.
**Sécurité **L'application d'une ingénierie à rebours est plus difficile sur le code non compilé que sur le code compilé parce qu'il lui manque la lisibilité et l'abstraction d'un langage de haut niveau. En outre, certains outils d'obscurcissement rendent le code compilé encore plus résistant à l'ingénierie à rebours.
Stabilité Le code est vérifié lors de la compilation en cas de problèmes d'erreurs de syntaxe, de sécurité de type et autres. En interceptant ces erreurs au moment de la génération, vous pouvez éliminer de nombreuses erreurs dans votre code.
Interopérabilité Étant donné que le code MSIL prend en charge n'importe quel langage, vous pouvez utiliser dans votre code des assemblys écrits initialement en d'autres langages. Par exemple, si vous écrivez une page Web ASP.NET en C#, vous pouvez ajouter une référence à un fichier .dll écrit en Visual Basic.
L'architecture de compilation ASP.NET contient plusieurs fonctionnalités, notamment :
Prise en charge de plusieurs langages.
Compilation automatique.
Déploiement flexible.
Système de génération extensible.
Les sections suivantes décrivent chacune de ces fonctionnalités.
Prise en charge de plusieurs langages
Dans ASP.NET 2.0 vous pouvez utiliser différents langages comme Visual Basic et C# dans la même application parce qu'ASP.NET crée plusieurs assemblys, un par langage. Pour le code stocké dans le dossier App_Code, vous pouvez spécifier un sous-dossier pour chaque langage. Pour plus d'informations sur le dossier App_Code, consultez Dossiers de code partagé dans des sites Web ASP.NET.
Compilation automatique
ASP.NET compile automatiquement votre code d'application et les ressources dépendantes quand un utilisateur demande pour la première fois la ressource d'un site Web. En général, ASP.NET crée un assembly pour chaque répertoire d'application (comme App_Code) et un assembly pour le répertoire principal. (Si les fichiers d'un répertoire sont écrits dans des langages de programmation différents, des assemblys séparés seront créés pour chaque langage.) Vous pouvez spécifier les répertoires compilés en assemblys uniques dans la section Compilation du fichier Web.config.
Déploiement flexible
Comme ASP.NET compile votre site Web à la première demande utilisateur, il vous suffit de copier le code source de votre application sur le serveur Web de production. Toutefois, ASP.NET fournit aussi des options de précompilation qui vous permettent de compiler votre site Web avant qu'il n'ait été déployé, ou de le compiler après qu'il a été déployé, mais avant qu'un utilisateur ne le demande. La précompilation offre plusieurs avantages. Elle peut améliorer la performance de votre site Web lors de la première demande, parce qu'il n'y aura pas à attendre qu'ASP.NET compile le site. La précompilation peut aussi vous aider à trouver des erreurs, qui auraient pu n'être détectées que lorsqu'un utilisateur aurait demandé une page. Enfin, si vous précompilez le site Web avant de le déployer, vous pouvez déployer les assemblys à la place du code source.
Vous pouvez précompiler un site Web à l'aide du compilateur ASP.NET (ASPNET_Compiler.exe). L'outil fournit les options de précompilation suivantes :
Compilation sur place Cette option exécute la même compilation que celle effectuée pendant la compilation dynamique. Utilisez cette option pour compiler un site Web déjà déployé sur un serveur de production.
Précompilation complète non modifiable Utilisez cette option pour compiler une application, puis copier la sortie compilée sur le serveur de production. L'ensemble du code de l'application, du balisage et du code de l'interface utilisateur est compilé dans des assemblys. Comme les fichiers d'espace réservé tels que les pages .aspx continuent à exister, vous pouvez effectuer des tâches spécifiques aux fichiers (configurer les autorisations, par exemple), mais ceux-ci ne contiennent aucun code modifiable. Pour mettre à jour une page ou du code, vous devez à nouveau précompiler le site Web, puis le redéployer.
Précompilation modifiable Cette option est similaire à la précompilation complète non modifiable, à la différence que les éléments d'interface comme les pages .aspx et les contrôles .ascx conservent leur balisage, le code de l'interface utilisateur et le code inline, le cas échéant. Vous pouvez mettre à jour le code dans le fichier après qu'il a été déployé ; ASP.NET détecte les modifications apportées au fichier et le recompile. Notez que le code d'un fichier code-behind (fichier .vb ou .cs) est généré dans un assembly pendant la précompilation, et que, par conséquent, vous ne pouvez pas le modifier sans repasser à nouveau par les étapes de précompilation et de déploiement.
Pour plus d'informations, consultez Vue d'ensemble de la précompilation ASP.NET.
Système de génération extensible
ASP.NET utilise les classes BuildProvider pour générer des éléments tels que des pages .aspx, des fichiers .ascx et des ressources globales. Vous pouvez étendre et personnaliser le système de génération ASP.NET pour compiler des ressources personnalisées en créant des classes qui héritent de la classe BuildProvider. Par exemple, vous pouvez ajouter un nouveau type de fichier puis écrire une classe BuildProvider qui génère ce type particulier.