Balíčky v šablonách sady Visual Studio

Šablony projektů a položek sady Visual Studio často potřebují zajistit, aby se při vytváření projektu nebo položky nainstalovaly určité balíčky. Například šablona ASP.NET MVC 3 nainstaluje jQuery, Modernr a další balíčky.

Autoři šablon můžou instruovat NuGet, aby nainstaloval potřebné balíčky, a ne jednotlivé knihovny. Vývojáři pak můžou tyto balíčky kdykoli později snadno aktualizovat.

Další informace o samotných šablonách vytváření najdete v tématu Postupy: Vytváření šablon projektů nebo vytváření vlastních šablon projektů a položek.

Zbývající část této části popisuje konkrétní kroky, které je potřeba provést při vytváření šablony, aby správně obsahovaly balíčky NuGet.

Ukázky

Ukázka předinstalovaných balíčků je k dispozici v úložišti NuGet/Samples na GitHubu.

Přidání balíčků do šablony

Při vytvoření instance šablony se vyvolá průvodce šablonou, který načte seznam balíčků, které se mají nainstalovat, spolu s informacemi o tom, kde tyto balíčky najít. Balíčky mohou být vloženy do VSIX, vloženy do šablony nebo umístěny na místním pevném disku v takovém případě, že k odkazování na cestu k souboru použijete klíč registru. Podrobnosti o těchto umístěních najdete dále v této části.

Předinstalované balíčky fungují pomocí průvodců šablonou. Když se vytvoří instance šablony, vyvolá se speciální průvodce. Průvodce načte seznam balíčků, které je potřeba nainstalovat, a předá příslušné rozhraní API NuGet příslušné informace.

Postup zahrnutí balíčků do šablony:

  1. vstemplate Do souboru přidejte odkaz na průvodce šablonou NuGet přidáním elementuWizardExtension:

    <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 je sestavení, které obsahuje pouze TemplateWizard třídu, což je jednoduchý obálka, která volá do skutečné implementace v NuGet.VisualStudio.dll. Verze sestavení se nikdy nezmění, aby šablony projektů a položek nadále fungovaly s novými verzemi NuGetu.

  2. Přidejte seznam balíčků, které se mají nainstalovat v projektu:

    <WizardData>
        <packages>
            <package id="jQuery" version="1.6.2" />
        </packages>
    </WizardData>
    

    Průvodce podporuje více <package> prvků pro podporu více zdrojů balíčků. Vyžadují se jak idversion atributy, tak i atributy, což znamená, že se nainstaluje konkrétní verze balíčku i v případě, že je k dispozici novější verze. To brání aktualizacím balíčků v narušení šablony a ponechání možnosti aktualizovat balíček vývojáři pomocí šablony.

  3. Zadejte úložiště, ve kterém NuGet může balíčky najít, jak je popsáno v následujících částech.

Úložiště balíčků VSIX

Doporučený přístup nasazení pro šablony projektů a položek sady Visual Studio je rozšíření VSIX, protože umožňuje zabalit více šablon projektů a položek dohromady a umožňuje vývojářům snadno zjišťovat šablony pomocí Správce rozšíření VS nebo Galerie sady Visual Studio. Aktualizace rozšíření je také snadné nasadit pomocí Mechanismus automatické aktualizace v nástroji Visual Studio Extension Manager.

Samotný VSIX může sloužit jako zdroj balíčků vyžadovaných šablonou:

  1. <packages> Upravte prvek v .vstemplate souboru následujícím způsobem:

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

    Atribut repository určuje typ úložiště, jako extension když repositoryId je jedinečný identifikátor samotného VSIX (Jedná se o ID hodnotu atributu v souboru rozšíření vsixmanifest , viz Referenční informace o schématu rozšíření VSIX 2.0).

  2. Umístěte soubory nupkg do složky volané Packages v rámci VSIX.

  3. Přidejte potřebné soubory balíčku jako <Asset> v vsixmanifest souboru (viz Referenční informace o schématu rozšíření VSIX 2.0):

    <Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
    
  4. Mějte na paměti, že balíčky můžete doručovat ve stejném VSIX jako šablony projektu, nebo je můžete umístit do samostatného VSIX, pokud to dává smysl pro váš scénář. Neodkazujte však na žádné VSIX, u kterých nemáte kontrolu, protože změny v daném rozšíření by mohly narušit vaši šablonu.

Úložiště balíčků šablon

Pokud distribuujete jenom jednu šablonu projektu nebo položky a nepotřebujete zabalit více šablon dohromady, můžete použít jednodušší, ale omezenější přístup, který zahrnuje balíčky přímo v souboru ZIP šablony projektu nebo položky:

  1. <packages> Upravte prvek v .vstemplate souboru následujícím způsobem:

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

    Atribut repository má hodnotu template a repositoryId atribut není povinný.

  2. Umístěte balíčky do kořenové složky souboru ZIP šablony projektu/položky.

Všimněte si, že použití tohoto přístupu v VSIX, které obsahuje více šablon, vede k zbytečnému nafouknutí, pokud jsou některé balíčky společné pro šablony. V takových případech použijte jako úložiště VSIX, jak je popsáno v předchozí části.

Cesta ke složce určená registrem

Sady SDK nainstalované pomocí MSI můžou instalovat balíčky NuGet přímo na počítač vývojáře. Díky tomu jsou okamžitě k dispozici, když se použije šablona projektu nebo položky, a nemusíte je během této doby extrahovat. ASP.NET šablony používají tento přístup.

  1. Mít instalační balíčky MSI na počítač. Můžete nainstalovat jenom .nupkg soubory nebo můžete nainstalovat soubory společně s rozbaleným obsahem, který při použití šablony uloží další krok. V tomto případě postupujte podle standardní struktury složek NuGetu, kde .nupkg jsou soubory v kořenové složce, a pak má každý balíček podsložku s dvojicí ID/verze jako název podsložky.

  2. Napište klíč registru pro identifikaci umístění balíčku:

    • Umístění klíče: Buď v celém HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository počítači, nebo pokud se jedná o nainstalované šablony a balíčky pro jednotlivé uživatele, případně použijte HKEY_CURRENT_USER\SOFTWARE\NuGet\Repository
    • Název klíče: Použijte název, který je pro vás jedinečný. Například šablony ASP.NET MVC 4 pro VS 2012 používají AspNetMvc4VS11.
    • Hodnoty: úplná cesta ke složce packages.
  3. <packages> V elementu .vstemplate v souboru přidejte atribut repository="registry" a zadejte název klíče registru v atributukeyName.

    • Pokud jste balíčky předem rozbalili, použijte atribut isPreunzipped="true" .

    • (NuGet 3.2+) Pokud chcete vynutit sestavení v době návrhu na konci instalace balíčku, přidejte forceDesignTimeBuild="true" atribut.

    • Jako optimalizaci přidejte skipAssemblyReferences="true" , protože samotná šablona už obsahuje potřebné odkazy.

      <packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true">
          <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" />
          <-- ... -->
      </packages>
      

Osvědčené postupy

  1. Deklarujte závislost na nuGet VSIX přidáním odkazu do manifestu 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>
    <!-- ... -->
    
  2. Vyžadovat, aby se šablony projektů a položek ukládaly při vytváření zahrnutím <PromptForSaveOnCreation>true</PromptForSaveOnCreation> do .vstemplate souboru.

  3. Šablony neobsahují packages.config soubor a neobsahují ani neobsahují žádné odkazy ani obsah, které by se přidaly při instalaci balíčků NuGet.