NuGet'a giriş

Tüm modern geliştirme platformları için temel bir araç, geliştiricilerin yararlı kod oluşturma, paylaşma ve kullanma mekanizmalarıdır. Bu tür kodlar genellikle derlenmiş kod (DLL'ler olarak) ve bu paketleri tüketen projelerde gereken diğer içerikleri içeren "paketler" içinde paketlenmiştir.

.NET için (.NET Core dahil) Microsoft tarafından desteklenen kod paylaşma mekanizması NuGet'dır.Bu mekanizma, .NET paketlerinin nasıl oluşturul, barındırıldı ve tüketilmelerini tanımlar ve bu rollerin her biri için araçlar sağlar.

Basitçe ifade etmek gerekirse, NuGet paketi derlenmiş kod (DLL), bu kodla ilgili diğer dosyaları ve paketin sürüm numarası gibi bilgileri içeren açıklayıcı bir bildirim içeren uzantılı tek bir ZIP .nupkg dosyasıdır. Paketleri paylaşmak ve bunları genel veya özel bir konakta yayımlamak için kod içeren geliştiriciler. Paket tüketicileri bu paketleri uygun konaklardan ediner, projelerine ekler ve ardından proje kodlarında bir paketin işlevselliğini çağırabilir. NuGet tüm ara ayrıntıları kendisi halleder.

Genel NuGet ana bilgisayarla birlikte özel konakları nuget.org, bir kuruluşa veya NuGet grubuna özel kodu paylaşmak için NuGet paketlerini kullanabilirsiniz. Ayrıca, kendi NuGet yalnızca kendi projelerinizi kullanmak üzere çarpanlarak kullanışlı bir yol olarak da kullanabilirsiniz. Kısacası, NuGet paketi paylaşılabilir bir kod birimidir, ancak belirli bir paylaşım anlamına da gerektirmez.

Oluşturucular, konaklar ve tüketiciler arasındaki paket akışı

Genel konak rolünde NuGet, nuget.org'da 100.000'den fazla benzersiz paketin merkezi deposunu barındırmaktadır. Bu paketler her gün milyonlarca .NET/.NET Core geliştiricisi tarafından kullanılır. NuGet, paketleri bulutta (Azure DevOps üzerinde), özel bir ağ üzerinde, hatta yalnızca yerel dosya sisteminiz üzerinde özel olarak barındırmanıza da olanak sağlar. Bunu yaparak, bu paketler yalnızca ana bilgisayar erişimine sahip olan geliştiriciler tarafından kullanılabilir ve paketleri belirli bir tüketici grubu için kullanılabilir yapma olanağı sunar. Seçenekler, Kendi akışlarınızı barındırma NuGet açıklanmıştır. Yapılandırma seçenekleri aracılığıyla, herhangi bir bilgisayar tarafından erişilebilen konakları tam olarak kontrol ederek paketlerin belirli kaynaklar gibi genel bir depo yerine belirli kaynaklardan elde nuget.org.

Doğası ne olursa olsun, konak paket oluşturucuları ve paket tüketicileri arasında bağlantı noktası olarak görev alır. Oluşturucular, paketleri NuGet ve bunları bir konakta yayımlar. Tüketiciler daha sonra erişilebilir konaklarda yararlı ve uyumlu paketleri arayarak projelerine bu paketleri indirir ve dahil edin. Bir projeye yüklendikten sonra paketlerin API'leri proje kodunun geri kalanı tarafından kullanılabilir.

Paket oluşturucuları, paket konakları ve paket tüketicileri arasındaki ilişki

Paket hedefleme uyumluluğu

"Uyumlu" paket, tüketen projenin hedef çerçevesiyle uyumlu en az bir hedef .NET çerçevesi için derlemeler içerdiği anlamına gelir. Geliştiriciler, UWP denetimlerinde olduğu gibi tek bir çerçeveye özgü paketler oluşturabilir veya daha geniş bir hedef yelpazesini destekleyebildi. Bir paketin uyumluluğunu en üst düzeye çıkarmak için, geliştiriciler tüm.NET .NET Standard .NET Core projelerinin tükettiği bir paketi hedefler. Bu, hem oluşturucular hem de tüketiciler için en verimli olandır çünkü tüm tüketen projeler için tek bir paket (genellikle tek bir derleme içerir) çalışır.

Diğer yandan, .NET Standard dışında API'lere ihtiyaç olan paket geliştiricileri, desteklemek istediğiniz farklı hedef çerçeveler için ayrı derlemeler oluşturun ve bu derlemelerin hepsini aynı pakete ekleyin ("çoklu hedefleme" olarak adlandırılır). Tüketici böyle bir paket yükley NuGet yalnızca proje için gereken derlemeleri ayıklar. Bu, paketin son uygulama ve/veya proje tarafından üretilen derlemeler üzerindeki ayak izini en aza indirger. Çok hedefli bir paket, elbette oluşturucus tarafından bakımı daha zordur.

Not

Hedef .NET Standard, çeşitli taşınabilir sınıf kitaplığı (PCL) hedeflerini kullanma yaklaşımının yerine geçmiştir. Bu nedenle bu belgeler, daha fazla veri .NET Standard.

NuGet araçları

Barındırma desteğine ek olarak NuGet, hem oluşturucular hem de tüketiciler tarafından kullanılan çeşitli araçlar da sağlar. Belirli araçları NuGet için bkz. İstemci araçlarını yükleme.

Araç Platformlar Geçerli Senaryolar Açıklama
dotnet CLI Tümü Oluşturma, Tüketim .NET Core ve .NET Standard kitaplıkları için CLI aracı ve .NET Framework (bkz. SDK özniteliği). Doğrudan .NET Core NuGet içinde belirli cli özellikleri sağlar. nuget.exeCLI'de olduğu gibi dotnet CLI de projelerle etkileşim Visual Studio değildir.
nuget.exe CLI Tümü Oluşturma, Tüketim .NET Framework kitaplıklarını hedef alan SDK stili olmayan projelere yönelik CLI .NET Standard aracı. Bazı komutlar NuGet, bazıları yalnızca tüketicilere, diğerleri ise her ikisinde de uygulanarak tüm uygulama özelliklerini sağlar. Örneğin, paket oluşturucuları komutunu kullanarak çeşitli derlemelerden ve ilgili dosyalardan bir paket oluşturur, paket tüketicileri bir proje klasörüne paket eklemek için kullanır ve herkes yapılandırma değişkenlerini nuget packnuget install ayarlamak için NuGet nuget config kullanır. Platformdan bağımsız bir araç olarak NuGet CLI, Visual Studio ile etkileşim kurmaz.
Paket Yöneticisi Konsolu Visual Studio Windows Tüketim Uygulama projelerinde paketleri yüklemek ve yönetmek için PowerShell Visual Studio sağlar.
Paket Yöneticisi UI Visual Studio Windows Tüketim Uygulama projelerinde paketleri yüklemek ve yönetmek için kullanımı kolay bir kullanıcı Visual Studio sağlar.
Kullanıcı arabirimini NuGet yönetme Mac için Visual Studio Tüketim Uygulama projelerinde paketleri yüklemek ve yönetmek için kullanımı kolay bir kullanıcı Mac için Visual Studio sağlama.
MSBuild Windows Oluşturma, Tüketim Bir projede kullanılan paketleri doğrudan proje araç zinciri aracılığıyla geri yükleme ve paket oluşturma MSBuild sağlar.

Gördüğünüz gibi, NuGet araçları büyük ölçüde paketleri oluştururken, tüketerek veya yayımlarken veya yayımlarken kullandığınız platforma bağlıdır. Paket oluşturucuları genellikle diğer paketlerde mevcut olan işlevleri temel alan tüketicilerdir ve NuGet olur. Elbette bu paketler de diğerlerine bağlı olabilir.

Daha fazla bilgi için Paket oluşturma iş akışı ve Paket tüketimi iş akışı makaleleriyle başlayabilirsiniz.

Bağımlılıkları yönetme

Başkalarının çalışmalarını kolayca oluşturma olanağı, bir paket yönetim sistemi. Buna uygun olarak, NuGet bir proje adına bu bağımlılık ağacını veya "grafı" yönetmektir. Basitçe söylemek gerekirse, yalnızca bir projede doğrudan kullanmakta olduğunuz paketlerle ilgilenebilirsiniz. Bu paketlerden herhangi biri diğer paketleri (diğer paketleri de tüketir) tüketirse NuGet tüm bu alt düzey bağımlılıkları da üst düzey olarak üst düzeye alır.

Aşağıdaki görüntüde, beş pakete bağımlı olan ve buna karşılık birkaç pakete bağımlı olan bir proje yer alelade bir görüntüdedir.

Bir .NET NuGet için bağımlılık grafı örneği

Bazı paketlerin bağımlılık grafı içinde birden çok kez görüntülendiklerini görebilirsiniz. Örneğin, B paketinin üç farklı tüketicisi vardır ve her tüketici bu paket için farklı bir sürüm de belirtebiliyor (gösterilmez). Bu, özellikle yaygın olarak kullanılan paketler için yaygın bir durumdur. NuGet neyse ki B paketinin tüm tüketicileri tam olarak hangi sürümüne uygun olduğunu belirlemek için tüm çabayı yapıyor. NuGet, bağımlılık grafı ne kadar derin olursa olsun diğer tüm paketler için de aynı şeyi yapar.

Bu hizmeti nasıl gerçekleştiriyor NuGet daha fazla ayrıntı için bkz. Bağımlılık çözümlemesi.

Başvuruları izleme ve paketleri geri yükleme

Projelerin geliştirici bilgisayarlar, kaynak denetim depoları, derleme sunucuları vb. arasında kolayca taşınamalarına neden olduğundan, NuGet paketlerinin ikili derlemelerini doğrudan projeye bağlı tutmak son derece pratik değildir. Bunu yapmak, projenin her kopyasını gereksiz yere şişirir (ve böylece kaynak denetim depolarında boş alan sağlar). Ayrıca, güncelleştirmelerin projenin tüm kopyalarına uygulanması gerektirebi paket ikililerini daha yeni sürümlere güncelleştirmeyi de zorlaştıracak.

NuGet, projenin bağımlı olduğu paketlerin hem üst düzey hem de alt düzey bağımlılıklar dahil olmak üzere basit bir başvuru listesini sürdürür. Başka bir ifadeyle, bir konaktan projeye paket her NuGet paket tanımlayıcısını ve sürüm numarasını başvuru listesine kaydedebilirsiniz. (Bir paketi kaldırmak, elbette paketi listeden kaldırır.) NuGet, Paket geri yükleme konusunda açıklandığı gibi istek üzerine tüm başvurulan paketleri geri yüklemek için bir sistem sağlar.

Paket NuGet bir başvuru listesi oluşturulur ve paketleri başka bir yerde geri yüklemek için kullanılabilir

Yalnızca başvuru listesiyle, NuGet daha sonra yeniden yükleyebilirsiniz— diğer bir ifadeyle,tüm bu paketleri daha sonra genel ve/veya özel konaklardan geri yükleyebilirsiniz. Bir projeyi kaynak denetimine işlerken veya başka bir yolla paylaştığınızda, yalnızca başvuru listesini dahil ediyor ve tüm paket ikililerini dışlar (bkz. Paketler ve kaynak denetimi.)

otomatik dağıtım sisteminin bir parçası olarak projenin bir kopyasını elde eden yapı sunucusu gibi bir proje alan bilgisayar, gerektiğinde bağımlılıkları geri yüklemeyi NuGet sorar. bu tam amaçla "NuGet geri yükleme" adımları sağlamak Azure DevOps gibi yapı sistemleri. benzer şekilde, geliştiriciler projenin bir kopyasını edindiklerinde (bir depoyu kopyalarken olduğu gibi), nuget restoredotnet restore gerekli tüm paketleri elde etmek için (NuGet clı), (dotnet clı) veya Install-Package (Paket Yöneticisi konsolu) gibi komutları çağırabilir. Visual Studio, bir proje oluştururken paketleri otomatik olarak geri yükler ( paket geri yüklemekonusunda açıklandığı gibi otomatik geri yükleme özelliğinin etkin olması sağlanır).

açıkça, daha sonra NuGet, geliştiricilerin ilgili olduğu birincil rol, projenizin adına başvuru listesinin saklanması ve bu başvurulan paketleri etkin bir şekilde geri yükleme (ve güncelleştirme) araçlarını sağlamaktır. Bu liste, çağrıldıklarında iki paket yönetim biçimindenbirinde tutulur:

  • Packagereference (veya "proje dosyalarında paket başvuruları") | (NuGet 4.0 +) , projenin en üst düzey bağımlılıklarının bir listesini doğrudan proje dosyasında tutar, bu yüzden ayrı bir dosya gerekmez. İlişkili bir dosya, obj/project.assets.json bir projenin tüm alt düzey bağımlılıklarla birlikte kullandığı paketlerin genel bağımlılık grafiğini yönetmek için dinamik olarak oluşturulur. PackageReference, her zaman .NET Core projeleri tarafından kullanılır.

  • packages.config: packages.config diğer yüklü paketlerin bağımlılıkları da dahil olmak üzere, projedeki tüm bağımlılıkların düz bir listesini tutan bir XML dosyası. Yüklenen veya geri yüklenen paketler bir klasörde depolanır packages .

herhangi bir projede hangi paket yönetimi biçiminin çalıştırıldığı, proje türüne ve NuGet (ve/veya Visual Studio) kullanılabilir sürümüne bağlıdır. Hangi biçimin kullanıldığını denetlemek için, packages.config ilk paketinizi yükledikten sonra proje kökünde öğesine bakmanız yeterlidir. Bu dosya yoksa, packagereference öğesi için proje dosyasına doğrudan bakın <> .

Bir seçiminiz olduğunda, PackageReference kullanmanızı öneririz. packages.config , eski amaçlar için korunur ve artık etkin geliştirme aşamasındadır.

İpucu

nuget.exeGibi çeşitli CLI komutları, nuget install paketi otomatik olarak başvuru listesine eklemez. liste, Visual Studio Paket Yöneticisi (uı veya konsol) ve clı ile bir paket yüklenirken güncelleştirilir dotnet.exe .

NuGet başka ne yapar?

Şimdiye kadar NuGet aşağıdaki özelliklerini öğrendiniz:

  • NuGet, merkezi nuget.org deposunu özel barındırma desteğiyle sağlar.
  • NuGet, geliştiricilerin paket oluşturmak, yayımlamak ve tüketmesi için ihtiyacı olan araçları sağlar.
  • en önemlisi, NuGet bir projede kullanılan paketlerin başvuru listesini ve bu paketleri ilgili listeden geri yükleme ve güncelleştirme olanağı sağlar.

bu işlemlerin verimli bir şekilde çalışmasını sağlamak için NuGet bazı arka planda iyileştirmeler yapılır. çoğu bilinen NuGet, bir paket önbelleğini ve bir genel paketler klasörünü, kısayol yükleme ve yeniden yükleme için yönetir. Önbellek zaten makinede yüklü olan bir paketin indirilmesini önler. genel paketler klasörü, birden çok projenin aynı yüklü paketi paylaşmasına olanak tanır ve böylece NuGet bilgisayardaki genel parmak izini azaltır. Önbellek ve genel paketler klasörü, bir yapı sunucusunda olduğu gibi daha fazla sayıda paketi sık geri yüklerken de çok yararlı olur. Bu mekanizmalar hakkında daha fazla bilgi için bkz. genel paketleri ve önbellek klasörlerini yönetme.

tek bir proje içinde NuGet, aynı paketin farklı sürümlerine birden fazla başvuruyu çözümlemeyi de içeren genel bağımlılık grafiğini yönetir. Projenin aynı bağımlılıklara sahip bir veya daha fazla pakete bağımlılığı olması oldukça yaygındır. Nuget.org üzerindeki en faydalı yardımcı program paketlerinin bazıları diğer birçok paket tarafından kullanılabilir. Tüm bağımlılık grafiğinde, aynı paketin farklı sürümlerine yönelik olarak kolayca on farklı başvuruya sahip olabilirsiniz. bu paketin birden çok sürümünün uygulamaya ait olmasını önlemek için NuGet tüm tüketiciler tarafından kullanılabilecek tek sürümün sayısını sıralar. (Daha fazla bilgi için bkz. bağımlılık çözünürlüğü.)

bunun ötesinde, NuGet paketlerin nasıl yapılandırıldığı ( yerelleştirme ve hata ayıklama sembolleridahil) ve nasıl başvurulduğu ( sürüm aralıkları ve yayın öncesi sürümlerdahil) ile ilgili tüm belirtimleri korur. NuGet ayrıca, hizmetleriyle birlikte çalışması için çeşitli apı 'ler sağlar ve Visual Studio uzantıları ve proje şablonları yazan geliştiriciler için destek sağlar.

bu belge için içindekiler tablosuna göz atabilmeniz için bir süre bekleyin ve bu yeteneklerin tümünü temsil eden sürüm notları ile birlikte NuGet beginnings.

Channel 9 ve YouTube'da daha fazla NuGet video bulun.

Yorumlar, katılımlar ve sorunlar

Son olarak, bu belgeye yönelik çok fazla hoş geldiniz açıklamaları ve katkımız vardır. yalnızca herhangi bir sayfanın üst kısmında geri bildirim ve düzenleme komutlarını seçmeniz ya da GitHub üzerindeki docs Repository ve docs sorun listesini ziyaret etmeniz yeterlidir.

ayrıca, çeşitli GitHub depolarındaNuGet katkılarına katkıda bulunuyoruz; NuGet sorunları üzerinde bulunabilir .

NuGet deneyiminizin keyfini çıkarın!