Paket dalam templat Visual Studio
Proyek Visual Studio dan templat item sering kali perlu memastikan bahwa paket tertentu diinstal saat proyek atau item dibuat. Misalnya, templat MVC 3 ASP.NET menginstal jQuery, Modernizr, dan paket lainnya.
Untuk mendukung ini, penulis templat dapat menginstruksikan NuGet untuk menginstal paket yang diperlukan, daripada pustaka individual. Pengembang kemudian dapat dengan mudah memperbarui paket tersebut di lain waktu.
Untuk mempelajari selengkapnya tentang penulisan templat itu sendiri, lihat Cara: Membuat Templat Proyek atau Membuat Proyek Kustom dan Templat Item.
Sisa bagian ini menjelaskan langkah-langkah spesifik yang harus diambil saat menulis templat untuk menyertakan paket NuGet dengan benar.
Sampel
Sampel Paket yang telah diinstal sebelumnya tersedia di repositori NuGet/Samples di GitHub.
Menambahkan paket ke templat
Saat templat dibuat, wizard templat dipanggil untuk memuat daftar paket untuk diinstal bersama dengan informasi tentang tempat menemukan paket tersebut. Paket dapat disematkan di VSIX, disematkan dalam templat, atau terletak di hard drive lokal dalam hal ini Anda menggunakan kunci registri untuk mereferensikan jalur file. Detail tentang lokasi ini diberikan nanti di bagian ini.
Paket yang telah diinstal sebelumnya berfungsi menggunakan wizard templat. Wizard khusus akan dipanggil saat templat diinisiasi. Wizard memuat daftar paket yang perlu diinstal dan meneruskan informasi tersebut ke API NuGet yang sesuai.
Langkah-langkah untuk menyertakan paket dalam templat:
Di file Anda
vstemplate
, tambahkan referensi ke wizard templat NuGet dengan menambahkanWizardExtension
elemen:<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
adalah rakitan yang hanyaTemplateWizard
berisi kelas , yang merupakan pembungkus sederhana yang memanggil ke dalam implementasi aktual diNuGet.VisualStudio.dll
. Versi rakitan tidak akan pernah berubah sehingga templat proyek/item terus berfungsi dengan versi baru NuGet.Tambahkan daftar paket untuk diinstal dalam proyek:
<WizardData> <packages> <package id="jQuery" version="1.6.2" /> </packages> </WizardData>
Wizard mendukung beberapa
<package>
elemen untuk mendukung beberapa sumber paket.id
Atribut danversion
diperlukan, yang berarti bahwa versi tertentu dari paket akan diinstal bahkan jika versi yang lebih baru tersedia. Ini mencegah pembaruan paket merusak templat, meninggalkan pilihan untuk memperbarui paket ke pengembang menggunakan templat.Tentukan repositori tempat NuGet dapat menemukan paket seperti yang dijelaskan di bagian berikut.
Repositori paket VSIX
Pendekatan penyebaran yang direkomendasikan untuk templat proyek/item Visual Studio adalah ekstensi VSIX karena memungkinkan Anda mengemas beberapa templat proyek/item bersama-sama dan memungkinkan pengembang untuk dengan mudah menemukan templat Anda menggunakan Vs Extension Manager atau Visual Studio Gallery. Pembaruan pada ekstensi juga mudah disebarkan menggunakan mekanisme pembaruan otomatis Visual Studio Extension Manager.
VSIX itu sendiri dapat berfungsi sebagai sumber untuk paket yang diperlukan oleh templat:
<packages>
Ubah elemen dalam.vstemplate
file sebagai berikut:<packages repository="extension" repositoryId="MyTemplateContainerExtensionId"> <!-- ... --> </packages>
Atribut
repository
menentukan jenis repositori sebagaiextension
sementararepositoryId
adalah pengidentifikasi unik VSIX itu sendiri (Ini adalah nilaiID
atribut dalam file ekstensivsixmanifest
, lihat Referensi Skema Ekstensi VSIX 2.0).Tempatkan file Anda
nupkg
dalam folder yang disebutPackages
dalam VSIX.Tambahkan file paket yang diperlukan seperti
<Asset>
dalam file Andavsixmanifest
(lihat Referensi Skema Ekstensi VSIX 2.0):<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
Perhatikan bahwa Anda dapat mengirimkan paket dalam VSIX yang sama dengan templat proyek Anda atau Anda dapat menempatkannya di VSIX terpisah jika itu lebih masuk akal untuk skenario Anda. Namun, jangan mereferensikan VSIX apa pun yang tidak Anda miliki kontrolnya, karena perubahan pada ekstensi tersebut dapat merusak templat Anda.
Repositori paket templat
Jika Anda hanya mendistribusikan satu templat proyek/item dan tidak perlu mengemas beberapa templat bersama-sama, Anda dapat menggunakan pendekatan yang lebih sederhana tetapi lebih terbatas yang mencakup paket langsung dalam file ZIP templat proyek/item:
<packages>
Ubah elemen dalam.vstemplate
file sebagai berikut:<packages repository="template"> <!-- ... --> </packages>
Atribut
repository
memiliki nilaitemplate
danrepositoryId
atribut tidak diperlukan.Tempatkan paket di folder akar file ZIP templat proyek/item.
Perhatikan bahwa menggunakan pendekatan ini dalam VSIX yang berisi beberapa templat menyebabkan kembung yang tidak perlu ketika satu atau beberapa paket umum untuk templat. Dalam kasus seperti itu , gunakan VSIX sebagai repositori seperti yang dijelaskan di bagian sebelumnya.
Jalur folder yang ditentukan registri
SDK yang diinstal menggunakan MSI dapat menginstal paket NuGet langsung di komputer pengembang. Ini membuatnya segera tersedia ketika templat proyek atau item digunakan, daripada harus mengekstraknya selama waktu tersebut. ASP.NET templat menggunakan pendekatan ini.
Minta paket penginstalan MSI ke komputer. Anda hanya
.nupkg
dapat menginstal file, atau Anda dapat menginstalnya bersama dengan konten yang diperluas, yang menyimpan langkah tambahan saat templat digunakan. Dalam hal ini, ikuti struktur folder standar NuGet di mana.nupkg
file berada di folder akar, lalu setiap paket memiliki subfolder dengan pasangan id/versi sebagai nama subfolder.Tulis kunci registri untuk mengidentifikasi lokasi paket:
- Lokasi kunci: Baik di seluruh
HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository
komputer atau jika templat dan paket yang diinstal per pengguna, atau gunakanHKEY_CURRENT_USER\SOFTWARE\NuGet\Repository
- Nama kunci: gunakan nama yang unik untuk Anda. Misalnya, templat MVC 4 ASP.NET untuk VS 2012 menggunakan
AspNetMvc4VS11
. - Nilai: jalur lengkap ke folder paket.
- Lokasi kunci: Baik di seluruh
<packages>
Dalam elemen dalam.vstemplate
file, tambahkan atributrepository="registry"
dan tentukan nama kunci registri Anda dikeyName
atribut .Jika Anda telah melakukan pra-zip paket, gunakan
isPreunzipped="true"
atribut .(NuGet 3.2+) Jika Anda ingin memaksa build waktu desain di akhir penginstalan paket, tambahkan
forceDesignTimeBuild="true"
atribut .Sebagai pengoptimalan, tambahkan
skipAssemblyReferences="true"
karena templat itu sendiri sudah menyertakan referensi yang diperlukan.<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> <-- ... --> </packages>
Praktik Terbaik
Nyatakan dependensi pada NuGet VSIX dengan menambahkan referensi ke dalamnya dalam manifes VSIX Anda:
<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> <!-- ... -->
Mengharuskan templat proyek/item disimpan pada pembuatan dengan menyertakan
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>
dalam.vstemplate
file.Templat tidak menyertakan
packages.config
file, dan tidak menyertakan atau referensi atau konten apa pun yang akan ditambahkan saat paket NuGet diinstal.