Share via


Visual Studio şablonlarındaki paketler

Visual Studio proje ve öğe şablonlarının genellikle bir proje veya öğe oluşturulduğunda belirli paketlerin yüklendiğinden emin olması gerekir. Örneğin, ASP.NET MVC 3 şablonu jQuery, Modernizr ve diğer paketleri yükler.

Şablon yazarları bunu desteklemek için NuGet'e tek tek kitaplıklar yerine gerekli paketleri yüklemesini emredebilir. Geliştiriciler daha sonra bu paketleri kolayca güncelleştirebilir.

Şablonları kendileri yazma hakkında daha fazla bilgi edinmek için bkz . Nasıl yapılır: Proje Şablonları Oluşturma veya Özel Proje ve Öğe Şablonları Oluşturma.

Bu bölümün geri kalanında, NuGet paketlerini düzgün bir şekilde eklemek için şablon yazarken atılması gereken belirli adımlar açıklanmaktadır.

Örnekler

Önceden Yüklenmiş Paketler örneği GitHub'daki NuGet/Samples deposunda bulunur.

Şablona paket ekleme

Şablon örneği oluşturulurken, yüklenecek paketlerin listesini ve bu paketlerin nerede bulunacağıyla ilgili bilgileri yüklemek için bir şablon sihirbazı çağrılır. Paketler VSIX'e eklenebilir, şablona eklenebilir veya yerel sabit sürücüde bulunabilir. Bu durumda, dosya yoluna başvurmak için bir kayıt defteri anahtarı kullanırsınız. Bu konumlarla ilgili ayrıntılar bu bölümün ilerleyen bölümlerinde verilmiştir.

Önceden yüklenmiş paketler şablon sihirbazları kullanılarak çalışır. Şablon örneği başlatıldığında özel bir sihirbaz çağrılır. Sihirbaz, yüklenmesi gereken paketlerin listesini yükler ve bu bilgileri uygun NuGet API'lerine geçirir.

Bir şablona paket ekleme adımları:

  1. Dosyanızda vstemplate , bir öğe ekleyerek NuGet şablon sihirbazına bir WizardExtension başvuru ekleyin:

    <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 , yalnızca TemplateWizard içindeki gerçek uygulamaya NuGet.VisualStudio.dllçağıran basit bir sarmalayıcı olan sınıfını içeren bir derlemedir. Proje/öğe şablonlarının NuGet'in yeni sürümleriyle çalışmaya devam etmesi için derleme sürümü hiçbir zaman değişmez.

  2. Projeye yüklenecek paketlerin listesini ekleyin:

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

    Sihirbaz, birden çok <package> paket kaynağını desteklemek için birden çok öğeyi destekler. id Hem hem de version öznitelikleri gereklidir; başka bir deyişle, daha yeni bir sürüm kullanılabilir olsa bile paketin belirli bir sürümü yüklenir. Bu, paket güncelleştirmelerinin şablonu bozmasını önler ve şablonu kullanarak paketi geliştiriciye güncelleştirme seçeneğini bırakır.

  3. Aşağıdaki bölümlerde açıklandığı gibi NuGet'in paketleri bulabileceği depoyu belirtin.

VSIX paket deposu

Visual Studio proje/öğe şablonları için önerilen dağıtım yaklaşımı bir VSIX uzantısıdır çünkü birden çok proje/öğe şablonunu birlikte paketlemenize ve geliştiricilerin VS Extension Manager veya Visual Studio Galerisi'ni kullanarak şablonlarınızı kolayca keşfetmesine olanak tanır. uzantıya Güncelleştirmeler ayrıca Visual Studio Uzantı Yöneticisi otomatik güncelleştirme mekanizması.

VSIX, şablonun gerektirdiği paketler için kaynak görevi görebilir:

  1. Dosyasındaki <packages>.vstemplate öğesini aşağıdaki gibi değiştirin:

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

    repository özniteliği, VSIX'in benzersiz tanımlayıcısı olarak repositoryId depo extension türünü belirtir (Bu, uzantının IDvsixmanifest dosyasındaki özniteliğin değeridir, bkz. VSIX Uzantı Şeması 2.0 Başvurusu).

  2. Dosyalarınızı nupkg VSIX içinde adlı Packages bir klasöre yerleştirin.

  3. Gerekli paket dosyalarını dosyanızda olduğu gibi <Asset> ekleyin (bkz. VSIX Uzantı Şeması 2.0 Başvurusu):vsixmanifest

    <Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
    
  4. Paketleri proje şablonlarınızla aynı VSIX'te teslim edebilirsiniz veya senaryonuz için daha anlamlıysa bunları ayrı bir VSIX'e yerleştirebilirsiniz. Ancak, denetiminizin olmadığı hiçbir VSIX'e başvurmayın, çünkü bu uzantıda yapılan değişiklikler şablonunuzu bozabilir.

Şablon paketi deposu

Yalnızca tek bir proje/öğe şablonu dağıtıyorsanız ve birden çok şablonu birlikte paketlemeniz gerekmiyorsa, paketleri doğrudan proje/öğe şablonu ZIP dosyasında içeren daha basit ama daha sınırlı bir yaklaşım kullanabilirsiniz:

  1. Dosyasındaki <packages>.vstemplate öğesini aşağıdaki gibi değiştirin:

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

    repository özniteliğinin değeri template vardır ve repositoryId özniteliği gerekli değildir.

  2. Paketleri proje/öğe şablonu ZIP dosyasının kök klasörüne yerleştirin.

Birden çok şablon içeren bir VSIX'te bu yaklaşımın kullanılması, şablonlar için bir veya daha fazla paket ortak olduğunda gereksiz şişkinliğe yol açar. Bu gibi durumlarda, vsix'i önceki bölümde açıklandığı gibi depo olarak kullanın.

Kayıt defteri tarafından belirtilen klasör yolu

MSI kullanılarak yüklenen SDK'lar NuGet paketlerini doğrudan geliştiricinin makinesine yükleyebilir. Bu, bir proje veya öğe şablonu kullanıldığında bunları bu süre içinde ayıklamak zorunda kalmadan hemen kullanılabilir hale getirir. ASP.NET şablonları bu yaklaşımı kullanır.

  1. MSI'nin paketleri makineye yüklemesini sağlayın. Yalnızca .nupkg dosyaları yükleyebilir veya bunları genişletilmiş içerikle birlikte yükleyebilirsiniz; bu da şablon kullanıldığında ek bir adım kaydeder. Bu durumda, NuGet'in dosyaların kök klasörde yer aldığı .nupkg standart klasör yapısını izleyin ve ardından her paketin alt klasör adı olarak kimlik/sürüm çifti olan bir alt klasörü vardır.

  2. Paket konumunu tanımlamak için bir kayıt defteri anahtarı yazın:

    • Anahtar konumu: Makine genelinde HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository veya kullanıcı başına yüklenen şablonlar ve paketlerse alternatif olarak HKEY_CURRENT_USER\SOFTWARE\NuGet\Repository
    • Anahtar adı: Size özel bir ad kullanın. Örneğin, VS 2012 için ASP.NET MVC 4 şablonları kullanır AspNetMvc4VS11.
    • Değerler: packages klasörünün tam yolu.
  3. dosyasındaki <packages> öğesinde .vstemplate özniteliğini ekleyin ve özniteliğinde repository="registry"keyName kayıt defteri anahtarı adınızı belirtin.

    • Paketlerinizin sıkıştırmasını önceden açtıysanız özniteliğini isPreunzipped="true" kullanın.

    • (NuGet 3.2+) Paket yüklemesinin sonunda tasarım zamanı derlemesini zorlamak istiyorsanız özniteliğini forceDesignTimeBuild="true" ekleyin.

    • İyileştirme olarak, şablonun kendisi zaten gerekli başvuruları içerdiğinden ekleyin skipAssemblyReferences="true" .

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

En İyi Uygulamalar

  1. VSIX bildiriminize bir başvuru ekleyerek NuGet VSIX'e bağımlılık bildirin:

    <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. Dosyaya ekleyerek <PromptForSaveOnCreation>true</PromptForSaveOnCreation> oluşturma işleminde proje/öğe şablonlarının kaydedilmesini gerektir .vstemplate .

  3. Şablonlar bir packages.config dosya içermez ve NuGet paketleri yüklendiğinde eklenecek başvuru veya içerik içermez.