Project Template, Quickstart et VSIX

Publié par Fabrice Michellonet sous le(s) label(s) le 13 mai 2011

Dernièrement j’ai fait mumuse avec les template de fichiers et projets que l’on peut créer dans Visual Studio.

coccinelle

Pour ceux qui ne connaissent pas, les template de fichier vous permettent de définir l’ossature d’un type de fichier que vous utilisez souvent. Une fois créé vous retrouverez votre template dans le menu de Visual Studio « Add new Item ».

Par extension les projects template vous permettent de définir la structure d’un type projet, afin de prendre en compte les conventions de votre équipe par exemple. Vous y définissez l’ensemble des fichiers présent dès la création du projet.

Ce qui est très intéressant, c'est que cela permet d'avoir des projets prêts à l'emploi dans votre environnement, avec par exemple NLog et votre conteneur DI préféré. Si vous êtes expérimenté cela vous évitera quelques copier-coller, si par contre vous ne connaissez pas bien une des briques technique cela vous évitera un tas de problématique.

Quoi qu'il en soit voici quelques astuces sur ces templates :


  1. Bien que le SDK de Visual Studio vous propose des projets de type Item Template et Project Template, le plus simple reste d’utiliser le menu File -> Export Template de Viual Studio pour générer votre précieux template.

  2. Pour créer un quickstart, qui n’est autre qu’un template de solution (plusieurs projets), je vous conseille de :

    1. Exporter vos différents projets template et extraire les archives zip correspondante dans un même dossier.

    2. Ajouter dans ce dossier de travail un fichier .vstemplate reprenant cette structure

    3. <VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
        <TemplateData>
          <Name>Ma solution</Name>
          <Description>Ma description</Description>
          <ProjectType>CSharp</ProjectType>
          <ProjectSubType></ProjectSubType>
          <SortOrder>1000</SortOrder>
          <CreateNewFolder>false</CreateNewFolder>
          <LocationField>Enabled</LocationField>
          <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
          <Icon>monicone_100x100.ico</Icon>
        </TemplateData>
        <TemplateContent>
          <ProjectCollection>
            <ProjectTemplateLink ProjectName="Web">
              Web\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="Domain">
              Domain\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="DAL">
              DAL\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="IServices">
              IServices\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="Services">
              Services\MyTemplate.vstemplate
            </ProjectTemplateLink>
          </ProjectCollection>
        </TemplateContent>
      </VSTemplate>
      

      Vous pouvez y mettre autant de référence a des projects que vous le souhaitez en ajoutant des balises ProjectTemplateLink.

    4. Créez une archive zip du dossier de travail et placez la dans le dossier %VSInstallDir%\Common7\IDE\ProjectTemplates\. Après redémarrage de Visual Studio le nouveau template sera dispo.

  3. Dans le fichier vstemplate de votre Quickstart, la première occurrence à un projet sera par convention le startup project.

  4. Pour étendre avec du code custom vos project template il vous faudra :

    1. Créer une assembly et implémenter l’interface Microsoft.VisualStudio.TemplateWizard.IWizard

    2. Ajouter la balise WizardExtension dans le fichier .vstemplate de votre project template

    3. <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
        …
        <WizardExtension>
          <Assembly>MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=952e5fc020f3b126</Assembly>
          <FullClassName>MyAssembly.Wizard</FullClassName>
        </WizardExtension>
      </VSTemplate>
      
  5. Il est possible de faire appel à une assembly custom dans un template de type quickstart, mais attention, la plupart des appels que vous ferez sur les objects EnvDTE et plus particulièrement EnvDTE.Project fréquemment utilisés dans la méthode IWizard. ProjectFinishedGenerating vous renverront des valeurs nulles.

  6. La façon la plus simple de créer un VSIX de déploiement est d’utiliser le projet de type VSIX Project (Visual C# -> Extensibility -> VSIX Project). Le SDK doit être installé.

  7. Dans le designer de VSIX, le champ ID comporte un GUID… n’y touchez surtout pas !

  8. Il est possible de définir dans quelle catégorie de template se trouvera l’élément que vous déployez via votre VSIX en renseignant le champ Add to subfolder.

  9. subfolder