Modèle MVC personnalisé
par Jacques Eloff
La publication de la mise à jour des outils MVC 3 pour Visual Studio 2010 a introduit un Assistant projet distinct pour les projets MVC. Le changement a été motivé par deux facteurs. Tout d’abord, l’introduction de nouveaux modèles dans MVC 3 et la prise en charge de moteurs d’affichage supplémentaires tels que Razor entraînent un encombrement de la boîte de dialogue Nouveau projet dans Visual Studio. Deuxièmement, les clients avaient demandé des points d’extensibilité et le nouvel Assistant de projet MVC nous permettrait de répondre à ces demandes.
L’ajout de modèles personnalisés était un processus ardu qui reposait sur l’utilisation du Registre pour rendre les nouveaux modèles visibles par l’Assistant projet MVC. L’auteur d’un nouveau modèle devait l’encapsuler à l’intérieur d’une MSI pour s’assurer que les entrées de Registre nécessaires seraient créées au moment de l’installation. L’alternative était de rendre un fichier ZIP contenant le modèle disponible et de faire en sorte que l’utilisateur final crée manuellement les entrées de Registre requises.
Aucune des approches mentionnées ci-dessus n’étant idéale, nous avons décidé de tirer parti de l’infrastructure existante fournie par les extensions VSIX pour faciliter la création, la distribution et l’installation de modèles MVC personnalisés à partir de MVC 4 pour Visual Studio 2012. Voici quelques-uns des avantages offerts par cette approche :
- Une extension VSIX peut contenir plusieurs modèles qui prennent en charge différents langages (C# et Visual Basic) et plusieurs moteurs d’affichage (ASPX et Razor).
- Une extension VSIX peut cibler plusieurs références SKU de Visual Studio, y compris les références SKU Express.
- La galerie Visual Studio facilite la distribution de l’extension à un large public.
- Les extensions VSIX peuvent être mises à niveau, ce qui facilite la création de corrections et de mises à jour de vos modèles personnalisés.
Prérequis
- Les utilisateurs doivent être familiarisés avec la création de modèles de projet, notamment le balisage requis pour les fichiers vstemplate, etc.
- Les utilisateurs doivent avoir Visual Studio Professional et versions ultérieures installées. Les références SKU Express ne prennent pas en charge la création de projets VSIX.
- Kit de développement logiciel (SDK) Visual Studio 2012 installé.
Exemple
La première étape consiste à créer un projet VSIX à l’aide de C# ou de Visual Basic. Sélectionnez Fichier > Nouveau projet, puis cliquez sur Extensibilité dans le volet gauche et sélectionnez le projet VSIX.
Une fois le projet créé, le concepteur VSIX est ouvert.
Le concepteur peut être utilisé pour modifier certaines des propriétés générales de l’extension qui seront affichées aux utilisateurs lorsqu’ils installeront l’extension ou parcourront les extensions installées dans Visual Studio (Extensions Tools > et Mises à jour). Une fois que vous avez terminé les informations générales, cliquez sur l’onglet Installer les cibles.
Cet onglet permet de spécifier les références SKU et les versions de Visual Studio prises en charge par votre extension. Cochez la case This VSIX is installed for all users to enables per-machine install of the VSIX. Cliquez sur le bouton Nouveau à droite pour ajouter des références SKU supplémentaires telles que Web Developer Express (VWD).
Si vous envisagez de prendre en charge toutes les références SKU Professional et supérieures (Professional, Premium et Ultimate), il vous suffit de sélectionner la référence SKU minimale dans la famille, Microsoft.VisualStudio.Pro. N’oubliez pas d’enregistrer toutes vos modifications une fois que vous avez terminé les cibles d’installation.
L’onglet Ressources permet d’ajouter tous vos fichiers de contenu à VSIX. Étant donné que MVC nécessite des métadonnées personnalisées, vous allez modifier le XML brut du fichier manifeste VSIX au lieu d’utiliser l’onglet Ressources pour ajouter du contenu. Commencez par ajouter le contenu du modèle au projet VSIX. Il est important que la structure du dossier et le contenu miroir la disposition du projet. L’exemple ci-dessous contient quatre modèles de projet dérivés du modèle de projet MVC de base. Assurez-vous que tous les fichiers qui composent votre modèle de projet (tout ce qui se trouve sous le dossier ProjectTemplates) sont ajoutés au groupe d’éléments Content dans le fichier projet VSIX et que chaque élément contient le jeu de métadonnées CopyToOutputDirectory et IncludeInVsix , comme illustré dans l’exemple ci-dessous.
<Content Include="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicWeb.config »>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<IncludeInVSIX>true</IncludeInVSIX>
</Contenu>
Si ce n’est pas le cas, l’IDE essaiera de compiler le contenu du modèle lorsque vous générez le VSIX et vous verrez probablement une erreur. Les fichiers de code dans les modèles contiennent souvent des paramètres de modèle spéciaux utilisés par Visual Studio lorsque le modèle de projet est instancié et ne peut donc pas être compilé dans l’IDE.
Fermez le concepteur VSIX, puis cliquez avec le bouton droit sur le fichier source.extension.manifest dans Explorateur de solutions, sélectionnez Ouvrir avec et choisissez l’option Éditeur XML (Texte).
Créez un <élément Assets> et ajoutez un <élément Asset> pour chaque fichier qui doit être inclus dans VSIX. L’attribut Type de chaque <élément Asset> doit être défini sur Microsoft.VisualStudio.Mvc.Template. Il s’agit d’un espace de noms personnalisé que seul l’Assistant projet MVC comprend. Pour plus d’informations sur la structure et la disposition du fichier manifeste, reportez-vous à la documentation du schéma VSIX 2.0.
Il ne suffit pas d’ajouter les fichiers à VSIX pour inscrire les modèles auprès de l’Assistant MVC. Vous devez fournir des informations telles que le nom du modèle, la description, les moteurs d’affichage pris en charge et le langage de programmation à l’Assistant MVC. Ces informations sont transmises dans les attributs personnalisés associés à l’élément <Asset> pour chaque fichier vstemplate .
<Asset d:VsixSubPath="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx »
Type="Microsoft.VisualStudio.Mvc.Template »
d:Source="File »
Path="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicMvcWebApplicationProjectTemplate.11.csaspx.vstemplate »
ProjectType="MVC »
Language="C# »
ViewEngine="Aspx »
TemplateId="MyMvcApplication »
Title="Custom Basic Web Application »
Description="Un modèle personnalisé dérivé d’une application web MVC de base (Razor) »
Version="4.0"/>
Voici une explication des attributs personnalisés qui doivent être présents :
- ProjectType doit être défini sur MVC.
- Language désigne le langage de développement pris en charge par le modèle. Les valeurs valides sont C# ou VB.
- ViewEngine désigne le moteur d’affichage pris en charge par le modèle, tel qu’Aspx ou Razor. Vous pouvez spécifier une valeur personnalisée pour ce champ.
- TemplateId est utilisé pour regrouper les modèles. Si la valeur correspond à un ID de modèle existant, elle remplace les modèles précédemment inscrits auprès de l’Assistant MVC.
- Title désigne la brève description affichée dans l’Assistant MVC sous chaque modèle de projet.
- Description désigne une description plus détaillée du modèle.
Une fois que vous avez ajouté tous les fichiers au manifeste et l’avez enregistré, vous remarquerez que l’onglet Ressources dans le concepteur affiche tous les fichiers, mais pas les attributs personnalisés que vous avez ajoutés aux <éléments Asset> pour les fichiers vstemplate .
Il ne reste plus qu’à compiler le projet VSIX et à l’installer.
Assurez-vous que toutes les instances de Visual Studio sont fermées sur l’ordinateur sur lequel vous envisagez de tester l’extension VSIX. Visual Studio recherche les nouvelles extensions au démarrage. Par conséquent, si l’IDE est ouvert lors de l’installation d’un VSIX, vous devez redémarrer Visual Studio. Dans Explorer, double-cliquez sur le fichier VSIX pour lancer le programme d’installation de VSIX, cliquez sur Installer, puis lancez Visual Studio.
Dans le menu, sélectionnez Outils > Extensions et Mises à jour pour confirmer que votre extension a été installée. Si le programme d’installation de VSIX a signalé des erreurs lors de l’installation de l’extension, vous pouvez consulter le journal du programme d’installation de VSIX pour plus d’informations. Le journal est généralement créé dans le dossier %temp% de l’utilisateur qui a installé l’extension, par exemple C:\Users\Bob\AppData\Local\Temp.
Après avoir fermé la fenêtre, vous pouvez créer un projet MVC 4 pour voir si vos nouveaux modèles sont affichés dans l’Assistant MVC.
Limites
- L’Assistant MVC ne prend pas en charge les modèles personnalisés localisés.
- L’Assistant ne signale aucune erreur s’il ne parvient pas à localiser les modèles personnalisés. Si l’un des attributs personnalisés requis est absent, le modèle est simplement exclu de l’Assistant.