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:
vstemplate
W pliku dodaj odwołanie do kreatora szablonu NuGet, dodającWizardExtension
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 programieNuGet.VisualStudio.dll
. Wersja zestawu nigdy się nie zmieni, aby szablony projektów/elementów nadal działały z nowymi wersjami pakietu NuGet.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 iversion
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.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:
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żextension
repositoryId
jest unikatowym identyfikatorem samego vsIX (jest to wartośćID
atrybutu w pliku rozszerzeniavsixmanifest
, zobacz Odwołanie do schematu rozszerzenia VSIX 2.0).nupkg
Umieść pliki w folderze o nazwiePackages
w pliku VSIX.Dodaj niezbędne pliki pakietu, tak jak
<Asset>
wvsixmanifest
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" />
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:
Zmodyfikuj
<packages>
.vstemplate
element w pliku w następujący sposób:<packages repository="template"> <!-- ... --> </packages>
Atrybut
repository
ma wartośćtemplate
, arepositoryId
atrybut nie jest wymagany.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.
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.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.
- Lokalizacja klucza: dla całego
W elemecie
<packages>
w.vstemplate
pliku dodaj atrybutrepository="registry"
i określ nazwę klucza rejestru w atrybuciekeyName
.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
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> <!-- ... -->
Wymagaj zapisania szablonów projektów/elementów podczas tworzenia przez dołączenie
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>
go do.vstemplate
pliku.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.