Précompilation SparviewEngine
SparkView est un moteur de vue pour ASP.NET MVC (et MonoRail), j’en ai déjà parlé dans une revue du web avec Spark. Avec la popularité de ASP.NET MVC (la version 2 est sortie en beta lors de la PDC cette semaine), Spark voit aussi sa visibilité grandir.
On peut utiliser la complétion du code (appellée Intellisense sur la plateforme .NET) lors du développement mais un refactoring peut introduire une erreur dans le code et on ne sera “prévenu” que lors de la compilation de la vue, c’est à dire lors de la première visite.
une solution existe : la précompilation des vues. On ajoute une classe “Installer”au projet et on y glisse en mode design une instance de MvcContrib.SparkViewEngine.Install.PrecompileInstaller après avoir ajouté cette dernière dans la ToolBox de Visual Studio.
On peut ajouter après cette ligne de commande dans les post-builds events du projet :
%systemroot%\Microsoft.NET\Framework\v2.0.50727\installutil “$(TargetPath)”
Ceci va créer une assembly Projet.Views.dll dans le répertoire bin du site. Il faut ajouter les attributs [Precompile] sur les contrôleurs pour lesquels vous voulez cette compilation. Maintenant il faut charger cette assembly, par exemple dans la méthode Start_Application :
if !DEBUG var vfactory = ViewEngines.Engines .FirstOrDefault(vf => vf is SparkViewFactory) as SparkViewFactory; if (null != vfactory) { vfactory.Engine.LoadBatchCompilation(Assembly.Load(“Site.Web.Views”)); } endif
Plus de mauvaise surprise au déploiement, les vues sont déjà compilées.
Quelques remarques :
-
il faut un version récente de Spark récupérée sur le site CodeBetter (s’identifier en tant que Guest)
-
ne pas oublier d’ajouter dans le Web.config les assembly utilisées même si elles sont déjà déclarées dans le _Global.spark:
-
Pour le moment le fait d’ajouter ces directives dans le Web.Config rends la complétion du code inactive.
-
Si vous utilisez un outil de build comme Nant ou PSake qui invoque MSbuild, le site web est compilé et copié dans un répertoire dédié nommé “_PublishedWebSites” ce qui fera échouer la compilation, on peut ajouter dans le csproj une tâche conditionnelle sur le post-build event suivant si la compilation se fait dans le cadre de Visual Studio ou non :
Billet publié dans les rubriques Programmation le