Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les modèles de projet et d’élément Visual Studio doivent souvent s’assurer que certains packages sont installés lors de la création d’un projet ou d’un élément. Par exemple, le modèle ASP.NET MVC 3 installe jQuery, Modernr et d’autres packages.
Pour prendre en charge ce problème, les auteurs de modèles peuvent demander à NuGet d’installer les packages nécessaires, plutôt que des bibliothèques individuelles. Les développeurs peuvent ensuite facilement mettre à jour ces packages ultérieurement.
Pour en savoir plus sur la création de modèles eux-mêmes, reportez-vous à How to : Create Project Templates or Create Custom Project and Item Templates.
Le reste de cette section décrit les étapes spécifiques à suivre lors de la création d’un modèle pour inclure correctement les packages NuGet.
Samples
L’exemple Packages préinstallés est disponible dans le référentiel NuGet/Samples sur GitHub.
Ajout de packages à un modèle
Lorsqu’un modèle est instancié, un Assistant modèle est appelé pour charger la liste des packages à installer, ainsi que des informations sur l’emplacement de recherche de ces packages. Les packages peuvent être incorporés dans VSIX, incorporés dans le modèle ou situés sur le disque dur local auquel cas vous utilisez une clé de Registre pour référencer le chemin du fichier. Des détails sur ces emplacements sont donnés plus loin dans cette section.
Les paquets préinstallés fonctionnent à l’aide d'assistants de modèle. Un assistant spécial est appelé lorsque le modèle est instancié. L’Assistant charge la liste des packages qui doivent être installés et transmet ces informations aux API NuGet appropriées.
Étapes à suivre pour inclure des packages dans un modèle :
Dans votre fichier
vstemplate, ajoutez une référence à l’assistant de modèle NuGet en ajoutant l’élémentWizardExtension.<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension>NuGet.VisualStudio.Interop.dllest un assembly qui contient uniquement leTemplateWizardclasse, qui est un wrapper simple qui fait appel à l’implémentation réelle dansNuGet.VisualStudio.dll. La version de l’assembly ne changera jamais afin que les modèles de projet/élément continuent à fonctionner avec de nouvelles versions de NuGet.Ajoutez la liste des packages à installer dans le projet :
<WizardData> <packages> <package id="jQuery" version="1.6.2" /> </packages> </WizardData>L’Assistant prend en charge plusieurs
<package>éléments pour des sources de package multiples. Les attributsidetversionsont obligatoires, ce qui signifie que la version spécifique d’un paquet sera installée même si une version plus récente est disponible. Cela empêche les mises à jour de package de rompre le modèle, en laissant le choix de mettre à jour le package pour le développeur à l’aide du modèle.Spécifiez le référentiel dans lequel NuGet peut trouver les packages, comme décrit dans les sections suivantes.
Référentiel de packages VSIX
L’approche de déploiement recommandée pour les modèles de projet/élément Visual Studio est une extension VSIX , car elle vous permet de empaqueter plusieurs modèles de projet/élément ensemble et permet aux développeurs de découvrir facilement vos modèles à l’aide du Gestionnaire d’extensions VS ou de la galerie Visual Studio. Les mises à jour de l’extension sont également faciles à déployer à l’aide du mécanisme de mise à jour automatique de Visual Studio Extension Manager.
Le VSIX lui-même peut servir de source pour les packages requis par le modèle :
Modifiez l’élément
<packages>dans le.vstemplatefichier comme suit :<packages repository="extension" repositoryId="MyTemplateContainerExtensionId"> <!-- ... --> </packages>L’attribut
repositoryspécifie le type de référentiel commeextension, tandis querepositoryIdest l’identifiant unique du VSIX (c'est la valeur de l’attributIDdans le fichier de l’extensionvsixmanifest, consultez la référence VSIX Extension Schema 2.0).Placez vos
nupkgfichiers dans un dossier appeléPackagesdans VSIX.Ajoutez les fichiers de package nécessaires comme
<Asset>dans votrevsixmanifestfichier (voir Référence de l’extension VSIX 2.0) :<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />Notez que vous pouvez fournir des packages dans le même VSIX que vos modèles de projet ou les placer dans un VSIX distinct si cela est plus judicieux pour votre scénario. Toutefois, ne référencez aucun VSIX sur lequel vous n’avez pas de contrôle, car les modifications apportées à cette extension peuvent interrompre votre modèle.
Dépôt de modèle de paquet
Si vous distribuez un seul modèle de projet/élément et que vous n’avez pas besoin de empaqueter plusieurs modèles ensemble, vous pouvez utiliser une approche plus simple mais plus limitée qui inclut des packages directement dans le fichier ZIP du modèle de projet/élément :
Modifiez l’élément
<packages>dans le.vstemplatefichier comme suit :<packages repository="template"> <!-- ... --> </packages>L’attribut
repositorya la valeurtemplateet l’attributrepositoryIdn’est pas obligatoire.Placez des packages dans le dossier racine du fichier ZIP du modèle de projet/élément.
Notez que l’utilisation de cette approche dans un VSIX qui contient plusieurs modèles entraîne un ballonnement inutile lorsqu’un ou plusieurs packages sont communs aux modèles. Dans ce cas, utilisez VSIX comme référentiel , comme décrit dans la section précédente.
Chemin d’accès au dossier spécifié par le Registre
Les kits SDK installés à l’aide d’une msi peuvent installer des packages NuGet directement sur l’ordinateur du développeur. Cela les rend immédiatement disponibles lorsqu’un modèle de projet ou d’élément est utilisé, plutôt que d’avoir à les extraire pendant cette période. ASP.NET modèles utilisent cette approche.
Installez les paquets d'installation MSI sur l'ordinateur. Vous pouvez installer uniquement les fichiers
.nupkg, ou les installer avec le contenu étendu, ce qui économise une étape supplémentaire lorsque le modèle est utilisé. Dans ce cas, suivez la structure de dossiers standard de NuGet où se trouvent les.nupkgfichiers dans le dossier racine, puis chaque package a un sous-dossier avec la paire ID/version comme nom du sous-dossier.Écrivez une clé de Registre pour identifier l’emplacement du package :
- Emplacement clé : soit pour l'ensemble du système
HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository, soit pour les modèles et paquets installés pour chaque utilisateur, utilisez alternativementHKEY_CURRENT_USER\SOFTWARE\NuGet\Repository - Nom de clé : utilisez un nom unique pour vous. Par exemple, les modèles ASP.NET MVC 4 pour VS 2012 utilisent
AspNetMvc4VS11. - Valeurs : chemin d’accès complet au dossier packages.
- Emplacement clé : soit pour l'ensemble du système
Dans l’élément
<packages>du.vstemplatefichier, ajoutez l’attributrepository="registry"et spécifiez le nom de votre clé de Registre dans l’attributkeyName.Si vous avez préalablement décompressé vos paquets, utilisez l’attribut
isPreunzipped="true".(NuGet 3.2+) Si vous souhaitez forcer une build au moment du design à la fin de l’installation du package, ajoutez l’attribut
forceDesignTimeBuild="true".En guise d’optimisation, ajoutez
skipAssemblyReferences="true"parce que le modèle lui-même inclut déjà les références nécessaires.<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> <-- ... --> </packages>
Meilleures pratiques
Déclarez une dépendance sur NuGet VSIX en lui ajoutant une référence dans votre manifeste VSIX :
<Reference Id="NuPackToolsVsix.Microsoft.67e54e40-0ae3-42c5-a949-fddf5739e7a5" MinVersion="1.7.30402.9028"> <Name>NuGet Package Manager</Name> <MoreInfoUrl>http://learn.microsoft.com/nuget/</MoreInfoUrl> </Reference> <!-- ... -->Exiger que les modèles de projet/élément soient enregistrés lors de la création en incluant
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>dans le.vstemplatefichier.Les modèles n’incluent pas de
packages.configfichier et n’incluent pas de références ou de contenu qui seraient ajoutés lorsque des packages NuGet sont installés.