Delen via


Pakketten in Visual Studio-sjablonen

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:

  1. Voeg in uw vstemplate bestand een verwijzing naar de wizard NuGet-sjabloon toe door een WizardExtension element 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.dll is een assembly die alleen de TemplateWizard klasse bevat, een eenvoudige wrapper die de werkelijke implementatie in NuGet.VisualStudio.dllaanroept. De assemblyversie verandert nooit, zodat project-/itemsjablonen blijven werken met nieuwe versies van NuGet.

  2. 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 de idversion kenmerken 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.

  3. 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:

  1. Wijzig het <packages> element in het .vstemplate bestand als volgt:

    <packages repository="extension" repositoryId="MyTemplateContainerExtensionId">
        <!-- ... -->
    </packages>
    

    Het repository kenmerk specificeert het type opslagplaats, terwijl extension de unieke id van de VSIX zelf is (dit is de waarde van het ID kenmerk in het vsixmanifest bestand van de extensie, zie naslaginformatie over het VSIX-extensieschema 2.0).

  2. Plaats uw nupkg bestanden in een map die in vsix wordt aangeroepen Packages .

  3. Voeg de benodigde pakketbestanden toe zoals <Asset> in uw vsixmanifest bestand (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" />
    
  4. 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:

  1. Wijzig het <packages> element in het .vstemplate bestand als volgt:

    <packages repository="template">
        <!-- ... -->
    </packages>
    

    Het repository kenmerk heeft de waarde template en het repositoryId kenmerk is niet vereist.

  2. 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.

  1. Installeer de MSI-pakketten op de computer. U kunt alleen de .nupkg bestanden 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 .nupkg bestanden zich in de hoofdmap bevinden. Vervolgens heeft elk pakket een submap met het id/versiepaar als de naam van de submap.

  2. Schrijf een registersleutel om de pakketlocatie te identificeren:

    • Sleutellocatie: de machinebrede HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository of, als het sjablonen en pakketten zijn die per gebruiker zijn geïnstalleerd, gebruik dan HKEY_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.
  3. Voeg in het <packages> element in het .vstemplate bestand het kenmerk repository="registry" toe en geef de naam van de registersleutel op in het keyName kenmerk.

    • 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

  1. 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>
    <!-- ... -->
    
  2. Vereisen dat project-/itemsjablonen worden opgeslagen bij het maken door <PromptForSaveOnCreation>true</PromptForSaveOnCreation> in het .vstemplate bestand op te slaan.

  3. Sjablonen bevatten packages.config geen bestand en bevatten geen verwijzingen of inhoud die zou worden toegevoegd wanneer NuGet-pakketten worden geïnstalleerd.