Bagikan melalui


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:

  1. Di file Anda vstemplate , tambahkan referensi ke wizard templat NuGet dengan menambahkan WizardExtension 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 hanya TemplateWizard berisi kelas , yang merupakan pembungkus sederhana yang memanggil ke dalam implementasi aktual di NuGet.VisualStudio.dll. Versi rakitan tidak akan pernah berubah sehingga templat proyek/item terus berfungsi dengan versi baru NuGet.

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

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

  1. <packages> Ubah elemen dalam .vstemplate file sebagai berikut:

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

    Atribut repository menentukan jenis repositori sebagai extension sementara repositoryId adalah pengidentifikasi unik VSIX itu sendiri (Ini adalah nilai ID atribut dalam file ekstensi vsixmanifest , lihat Referensi Skema Ekstensi VSIX 2.0).

  2. Tempatkan file Anda nupkg dalam folder yang disebut Packages dalam VSIX.

  3. Tambahkan file paket yang diperlukan seperti <Asset> dalam file Anda vsixmanifest (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" />
    
  4. 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:

  1. <packages> Ubah elemen dalam .vstemplate file sebagai berikut:

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

    Atribut repository memiliki nilai template dan repositoryId atribut tidak diperlukan.

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

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

  2. 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 gunakan HKEY_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.
  3. <packages> Dalam elemen dalam .vstemplate file, tambahkan atribut repository="registry" dan tentukan nama kunci registri Anda di keyName 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

  1. 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>
    <!-- ... -->
    
  2. Mengharuskan templat proyek/item disimpan pada pembuatan dengan menyertakan <PromptForSaveOnCreation>true</PromptForSaveOnCreation> dalam .vstemplate file.

  3. Templat tidak menyertakan packages.config file, dan tidak menyertakan atau referensi atau konten apa pun yang akan ditambahkan saat paket NuGet diinstal.