Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Visual Studio-project- en itemsjablonen moeten er vaak voor zorgen dat bepaalde pakketten worden geïnstalleerd wanneer een project of item wordt gemaakt. Met de ASP.NET MVC 3-sjabloon worden bijvoorbeeld jQuery, Modernizr en andere pakketten geïnstalleerd.
Ter ondersteuning hiervan kunnen auteurs van sjablonen NuGet instrueren om de benodigde pakketten te installeren in plaats van afzonderlijke bibliotheken. Ontwikkelaars kunnen deze pakketten vervolgens op elk gewenst moment eenvoudig bijwerken.
Zie Projectsjablonen maken of Aangepaste project- en itemsjablonen maken voor meer informatie over het zelf ontwerpen van sjablonen.
In de rest van deze sectie worden de specifieke stappen beschreven die moeten worden uitgevoerd bij het ontwerpen van een sjabloon om NuGet-pakketten correct op te nemen.
Samples
Het voorbeeld van vooraf geïnstalleerde pakketten is beschikbaar in de opslagplaats NuGet/Samples op GitHub.
Pakketten toevoegen aan een sjabloon
Wanneer een sjabloon wordt geïnstantieerd, wordt een sjabloonwizard aangeroepen om de lijst met pakketten te laden die moeten worden geïnstalleerd, samen met informatie over waar u deze pakketten kunt vinden. Pakketten kunnen worden ingesloten in vsix, ingesloten in de sjabloon of op de lokale harde schijf. In dat geval gebruikt u een registersleutel om naar het bestandspad te verwijzen. Verderop in deze sectie vindt u meer informatie over deze locaties.
Vooraf geïnstalleerde pakketten werken met behulp van sjabloonwizards. Er wordt een speciale wizard aangeroepen wanneer de sjabloon wordt geïnstantieerd. De wizard laadt de lijst met pakketten die moeten worden geïnstalleerd en geeft die informatie door aan de juiste NuGet-API's.
Stappen voor het opnemen van pakketten in een sjabloon:
Voeg in uw
vstemplatebestand een verwijzing naar de wizard NuGet-sjabloon toe door eenWizardExtensionelement toe te voegen:<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension>NuGet.VisualStudio.Interop.dllis een assembly die alleen deTemplateWizardklasse bevat, een eenvoudige wrapper die de werkelijke implementatie inNuGet.VisualStudio.dllaanroept. De assemblyversie verandert nooit, zodat project-/itemsjablonen blijven werken met nieuwe versies van NuGet.Voeg de lijst met pakketten toe die u in het project wilt installeren:
<WizardData> <packages> <package id="jQuery" version="1.6.2" /> </packages> </WizardData>De wizard ondersteunt meerdere
<package>elementen ter ondersteuning van meerdere pakketbronnen. Zowel de als deidversionkenmerken zijn vereist, wat betekent dat specifieke versie van een pakket wordt geïnstalleerd, zelfs als er een nieuwere versie beschikbaar is. Hierdoor voorkomt u dat pakketupdates de sjabloon breken, waardoor de keuze wordt overgelaten om het pakket bij te werken aan de ontwikkelaar met behulp van de sjabloon.Geef de opslagplaats op waar NuGet de pakketten kan vinden, zoals beschreven in de volgende secties.
VSIX-pakketopslagplaats
De aanbevolen implementatiebenadering voor Visual Studio-project-/itemsjablonen is een VSIX-extensie , omdat u hiermee meerdere project-/itemsjablonen samen kunt verpakken en ontwikkelaars uw sjablonen eenvoudig kunt detecteren met vs-extensiebeheer of visual studiogalerie. Updates voor de extensie zijn ook eenvoudig te implementeren met behulp van het automatische updatemechanisme van Visual Studio Extension Manager.
De VSIX zelf kan fungeren als de bron voor pakketten die vereist zijn voor de sjabloon:
Wijzig het
<packages>element in het.vstemplatebestand als volgt:<packages repository="extension" repositoryId="MyTemplateContainerExtensionId"> <!-- ... --> </packages>Het
repositorykenmerk specificeert het type opslagplaats, terwijlextensionde unieke id van de VSIX zelf is (dit is de waarde van hetIDkenmerk in hetvsixmanifestbestand van de extensie, zie naslaginformatie over het VSIX-extensieschema 2.0).Plaats uw
nupkgbestanden in een map die in vsix wordt aangeroepenPackages.Voeg de benodigde pakketbestanden toe zoals
<Asset>in uwvsixmanifestbestand (zie naslaginformatie voor VSIX-extensieschema 2.0):<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />Houd er rekening mee dat u pakketten in dezelfde VSIX kunt leveren als uw projectsjablonen of dat u ze in een afzonderlijke VSIX kunt plaatsen als dat logischer is voor uw scenario. Verwijs echter niet naar vsix waarvoor u geen controle hebt, omdat wijzigingen in die extensie uw sjabloon kunnen breken.
Opslagplaats voor sjabloonpakketten
Als u slechts één project-/itemsjabloon distribueert en niet meerdere sjablonen tegelijk hoeft te verpakken, kunt u een eenvoudigere maar beperktere benadering gebruiken die pakketten rechtstreeks in het ZIP-bestand van de project-/itemsjabloon bevat:
Wijzig het
<packages>element in het.vstemplatebestand als volgt:<packages repository="template"> <!-- ... --> </packages>Het
repositorykenmerk heeft de waardetemplateen hetrepositoryIdkenmerk is niet vereist.Plaats pakketten in de hoofdmap van het ZIP-bestand met project-/itemsjablonen.
Houd er rekening mee dat het gebruik van deze benadering in een VSIX die meerdere sjablonen bevat, tot onnodige bloat leidt wanneer een of meer pakketten gebruikelijk zijn voor de sjablonen. In dergelijke gevallen gebruikt u VSIX als de opslagplaats , zoals beschreven in de vorige sectie.
Pad naar door register opgegeven map
SDK's die zijn geïnstalleerd met behulp van een MSI, kunnen NuGet-pakketten rechtstreeks op de computer van de ontwikkelaar installeren. Hierdoor worden ze onmiddellijk beschikbaar wanneer een project- of itemsjabloon wordt gebruikt, in plaats van ze gedurende die tijd te extraheren. ASP.NET sjablonen gebruiken deze methode.
Installeer de MSI-pakketten op de computer. U kunt alleen de
.nupkgbestanden installeren of u kunt deze samen met de uitgebreide inhoud installeren, waardoor een extra stap wordt opgeslagen wanneer de sjabloon wordt gebruikt. In dit geval volgt u de standaardmapstructuur van NuGet waarin de.nupkgbestanden zich in de hoofdmap bevinden. Vervolgens heeft elk pakket een submap met het id/versiepaar als de naam van de submap.Schrijf een registersleutel om de pakketlocatie te identificeren:
- Sleutellocatie: de machinebrede
HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repositoryof, als het sjablonen en pakketten zijn die per gebruiker zijn geïnstalleerd, gebruik danHKEY_CURRENT_USER\SOFTWARE\NuGet\Repository. - Sleutelnaam: gebruik een naam die uniek is voor u. De ASP.NET MVC 4-sjablonen voor VS 2012 gebruiken
AspNetMvc4VS11bijvoorbeeld. - Waarden: het volledige pad naar de map met pakketten.
- Sleutellocatie: de machinebrede
Voeg in het
<packages>element in het.vstemplatebestand het kenmerkrepository="registry"toe en geef de naam van de registersleutel op in hetkeyNamekenmerk.Als u uw pakketten vooraf hebt uitgepakt, gebruikt u het
isPreunzipped="true"kenmerk.(NuGet 3.2+) Als u een ontwerptijd-build aan het einde van de pakketinstallatie wilt afdwingen, voegt u het
forceDesignTimeBuild="true"kenmerk toe.Voeg als optimalisatie toe
skipAssemblyReferences="true"omdat de sjabloon zelf al de benodigde verwijzingen bevat.<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> <-- ... --> </packages>
Beste praktijken
Declareer een afhankelijkheid van nuGet VSIX door er een verwijzing aan toe te voegen in uw VSIX-manifest:
<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> <!-- ... -->Vereisen dat project-/itemsjablonen worden opgeslagen bij het maken door
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>in het.vstemplatebestand op te slaan.Sjablonen bevatten
packages.configgeen bestand en bevatten geen verwijzingen of inhoud die zou worden toegevoegd wanneer NuGet-pakketten worden geïnstalleerd.