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ı:
Dosyanızda
vstemplate
, bir öğe ekleyerek NuGet şablon sihirbazına birWizardExtension
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ızcaTemplateWizard
içindeki gerçek uygulamayaNuGet.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.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 deversion
ö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.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:
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ı olarakrepositoryId
depoextension
türünü belirtir (Bu, uzantınınID
vsixmanifest
dosyasındaki özniteliğin değeridir, bkz. VSIX Uzantı Şeması 2.0 Başvurusu).Dosyalarınızı
nupkg
VSIX içinde adlıPackages
bir klasöre yerleştirin.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" />
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:
Dosyasındaki
<packages>
.vstemplate
öğesini aşağıdaki gibi değiştirin:<packages repository="template"> <!-- ... --> </packages>
repository
özniteliğinin değeritemplate
vardır verepositoryId
özniteliği gerekli değildir.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.
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.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 olarakHKEY_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.
- Anahtar konumu: Makine genelinde
dosyasındaki
<packages>
öğesinde.vstemplate
özniteliğini ekleyin ve özniteliğinderepository="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
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> <!-- ... -->
Dosyaya ekleyerek
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>
oluşturma işleminde proje/öğe şablonlarının kaydedilmesini gerektir.vstemplate
.Şablonlar bir
packages.config
dosya içermez ve NuGet paketleri yüklendiğinde eklenecek başvuru veya içerik içermez.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin