Pakiety w szablonach programu Visual Studio

Szablony projektów i elementów programu Visual Studio często wymagają upewnienia się, że niektóre pakiety są instalowane podczas tworzenia projektu lub elementu. Na przykład szablon ASP.NET MVC 3 instaluje pakiety jQuery, Modernizr i inne.

Aby to umożliwić, autorzy szablonów mogą poinstruować NuGet o zainstalowanie niezbędnych pakietów, a nie poszczególnych bibliotek. Deweloperzy mogą następnie łatwo aktualizować te pakiety w dowolnym późniejszym czasie.

Aby dowiedzieć się więcej na temat tworzenia szablonów, zapoznaj się z tematem How to: Create Project Templates (Tworzenie szablonów projektów) lub Creating Custom Project and Item Templates (Tworzenie niestandardowych szablonów projektów i elementów).

W pozostałej części tej sekcji opisano konkretne kroki, które należy wykonać podczas tworzenia szablonu w celu prawidłowego uwzględnienia pakietów NuGet.

Przykłady

Przykład Preinstalled-Packages jest dostępny w repozytorium NuGet/Samples w witrynie GitHub.

Dodawanie pakietów do szablonu

Po utworzeniu wystąpienia szablonu kreator szablonu jest wywoływany w celu załadowania listy pakietów do zainstalowania wraz z informacjami o tym, gdzie można znaleźć te pakiety. Pakiety można osadzać w vsIX, osadzać w szablonie lub znajdować się na lokalnym dysku twardym, w którym przypadku używasz klucza rejestru do odwołowania się do ścieżki pliku. Szczegółowe informacje na temat tych lokalizacji podano w dalszej części tej sekcji.

Wstępnie zainstalowane pakiety działają przy użyciu kreatorów szablonów. Kreator specjalny jest wywoływany po utworzeniu wystąpienia szablonu. Kreator ładuje listę pakietów, które należy zainstalować i przekazuje te informacje do odpowiednich interfejsów API NuGet.

Kroki dołączania pakietów do szablonu:

  1. vstemplate W pliku dodaj odwołanie do kreatora szablonu NuGet, dodając WizardExtension element:

    <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 jest zestawem zawierającym tylko klasę TemplateWizard , która jest prostą otoką, która wywołuje rzeczywistą implementację w programie NuGet.VisualStudio.dll. Wersja zestawu nigdy się nie zmieni, aby szablony projektów/elementów nadal działały z nowymi wersjami pakietu NuGet.

  2. Dodaj listę pakietów do zainstalowania w projekcie:

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

    Kreator obsługuje wiele <package> elementów do obsługi wielu źródeł pakietów. id Zarówno atrybuty i version są wymagane, co oznacza, że określona wersja pakietu zostanie zainstalowana, nawet jeśli jest dostępna nowsza wersja. Zapobiega to uszkodzeniu szablonu przez aktualizacje pakietów, pozostawiając możliwość zaktualizowania pakietu do dewelopera przy użyciu szablonu.

  3. Określ repozytorium, w którym NuGet można znaleźć pakiety zgodnie z opisem w poniższych sekcjach.

Repozytorium pakietów VSIX

Zalecane podejście do wdrażania szablonów projektów/elementów programu Visual Studio jest rozszerzeniem VSIX, ponieważ umożliwia spakowanie wielu szablonów projektów/elementów razem i umożliwia deweloperom łatwe odnajdywanie szablonów przy użyciu Menedżera rozszerzeń programu VS lub galerii programu Visual Studio. Aktualizacje do rozszerzenia są również łatwe do wdrożenia przy użyciu narzędzia Mechanizm automatycznej aktualizacji menedżera rozszerzeń programu Visual Studio.

Sam plik VSIX może służyć jako źródło pakietów wymaganych przez szablon:

  1. Zmodyfikuj <packages>.vstemplate element w pliku w następujący sposób:

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

    Atrybut repository określa typ repozytorium, ponieważ extensionrepositoryId jest unikatowym identyfikatorem samego vsIX (jest to wartość ID atrybutu w pliku rozszerzenia vsixmanifest , zobacz Odwołanie do schematu rozszerzenia VSIX 2.0).

  2. nupkg Umieść pliki w folderze o nazwie Packages w pliku VSIX.

  3. Dodaj niezbędne pliki pakietu, tak jak <Asset> w vsixmanifest pliku (zobacz Odwołanie do schematu rozszerzenia VSIX 2.0):

    <Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
    
  4. Należy pamiętać, że pakiety można dostarczać w tym samym pliku VSIX co szablony projektu lub umieścić je w osobnym vsIX, jeśli ma to większe znaczenie dla danego scenariusza. Nie należy jednak odwoływać się do żadnego pliku VSIX, nad którym nie masz kontroli, ponieważ zmiany w tym rozszerzeniu mogą spowodować przerwanie szablonu.

Repozytorium pakietów szablonów

Jeśli dystrybuujesz tylko jeden szablon projektu/elementu i nie musisz pakować wielu szablonów razem, możesz użyć prostszego, ale bardziej ograniczonego podejścia obejmującego pakiety bezpośrednio w pliku ZIP szablonu projektu/elementu:

  1. Zmodyfikuj <packages>.vstemplate element w pliku w następujący sposób:

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

    Atrybut repository ma wartość template , a repositoryId atrybut nie jest wymagany.

  2. Umieść pakiety w folderze głównym pliku ZIP szablonu projektu/elementu.

Należy pamiętać, że użycie tego podejścia w systemie VSIX, który zawiera wiele szablonów, prowadzi do niepotrzebnego wzdęć, gdy co najmniej jeden pakiet jest wspólny dla szablonów. W takich przypadkach użyj pliku VSIX jako repozytorium zgodnie z opisem w poprzedniej sekcji.

Ścieżka folderu określonego w rejestrze

Zestawy SDK instalowane przy użyciu tożsamości usługi zarządzanej mogą instalować pakiety NuGet bezpośrednio na maszynie dewelopera. Dzięki temu są one natychmiast dostępne, gdy jest używany szablon projektu lub elementu, zamiast wyodrębniać je w tym czasie. ASP.NET szablony używają tego podejścia.

  1. Na maszynie mają zainstalowane pakiety MSI. Można zainstalować tylko .nupkg pliki lub zainstalować je wraz z rozszerzoną zawartością, co spowoduje zapisanie dodatkowego kroku podczas korzystania z szablonu. W takim przypadku postępuj zgodnie ze standardową strukturą folderów NuGet, w której .nupkg pliki znajdują się w folderze głównym, a następnie każdy pakiet ma podfolder z parą identyfikator/wersja jako nazwę podfolderu.

  2. Zapisz klucz rejestru, aby zidentyfikować lokalizację pakietu:

    • Lokalizacja klucza: dla całego HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository komputera lub jeśli jest zainstalowany przez użytkownika szablony i pakiety, możesz też użyć HKEY_CURRENT_USER\SOFTWARE\NuGet\Repository
    • Nazwa klucza: użyj unikatowej nazwy. Na przykład szablony ASP.NET MVC 4 dla programu VS 2012 używają polecenia AspNetMvc4VS11.
    • Wartości: pełna ścieżka do folderu packages.
  3. W elemecie <packages> w .vstemplate pliku dodaj atrybut repository="registry" i określ nazwę klucza rejestru w atrybucie keyName .

    • Jeśli pakiety zostały wstępnie rozpakowane, użyj atrybutu isPreunzipped="true" .

    • (NuGet 3.2+) Jeśli chcesz wymusić kompilację w czasie projektowania na końcu instalacji pakietu, dodaj forceDesignTimeBuild="true" atrybut .

    • W ramach optymalizacji dodaj skipAssemblyReferences="true" , ponieważ sam szablon zawiera już niezbędne odwołania.

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

Najlepsze praktyki

  1. Zadeklaruj zależność od vsIX narzędzia NuGet, dodając do niego odwołanie w manifeście 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. Wymagaj zapisania szablonów projektów/elementów podczas tworzenia przez dołączenie <PromptForSaveOnCreation>true</PromptForSaveOnCreation> go do .vstemplate pliku.

  3. Szablony nie zawierają packages.config pliku i nie zawierają ani żadnych odwołań ani zawartości, które zostaną dodane podczas instalowania pakietów NuGet.