NuGet
NuGet, .NET ekosistemi için bir paket yöneticisidir ve geliştiricilerin .NET açık kaynak kitaplıklarını bulup edinmelerinin birincil yoludur. Microsoft tarafından NuGet paketlerini barındırmak için sağlanan ücretsiz bir hizmet olan NuGet.org, genel NuGet paketlerinin birincil konağıdır, ancak MyGet ve Azure Artifacts gibi özel NuGet hizmetlerinde yayımlayabilirsiniz.
NuGet paketi oluşturma
NuGet paketi (*.nupkg
), .NET derlemelerini ve ilişkili meta verileri içeren bir zip dosyasıdır.
NuGet paketi oluşturmanın iki ana yolu vardır. Daha yeni ve önerilen yol, SDK stilindeki bir projeden (içeriği ile <Project Sdk="Microsoft.NET.Sdk">
başlayan proje dosyası) bir paket oluşturmaktır. Derlemeler ve hedefler pakete otomatik olarak eklenir ve kalan meta veriler paket adı ve sürüm numarası gibi MSBuild dosyasına eklenir. komutuyla dotnet pack
derlemek, derlemeler yerine bir *.nupkg
dosya çıkışı oluşturur.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Contoso.Api</AssemblyName>
<PackageVersion>1.1.0</PackageVersion>
<Authors>John Doe</Authors>
</PropertyGroup>
</Project>
NuGet paketi oluşturmanın eski yolu bir *.nuspec
dosya ve nuget.exe
komut satırı aracıdır. Nuspec dosyası size büyük denetim sağlar, ancak son NuGet paketine eklenecek derlemeleri ve hedefleri dikkatli bir şekilde belirtmeniz gerekir. Hata yapmak veya değişiklik yaparken birinin nuspec'i güncelleştirmeyi unutması kolaydır. Nuspec'in avantajı, henüz SDK stili bir proje dosyasını desteklemeyen çerçeveler için NuGet paketleri oluşturmak için bunu kullanabilmenizdir.
✔️ NuGet paketini oluşturmak için SDK stilinde bir proje dosyası kullanmayı göz önünde bulundurun.
Paket bağımlılıkları
NuGet paket bağımlılıkları Bağımlılıklar makalesinde ayrıntılı olarak ele alınmıştır .
Önemli NuGet paketi meta verileri
NuGet paketi birçok meta veri özelliğini destekler. Aşağıdaki tablo, NuGet.org üzerindeki her paketin sağlaması gereken temel meta verileri içerir:
MSBuild Özellik adı | Nuspec adı | Açıklama |
---|---|---|
PackageId |
id |
Paket tanımlayıcısı. Tanımlayıcıdan bir ön ek, ölçütleri karşılıyorsa ayrılabilir. |
PackageVersion |
version |
NuGet paket sürümü. Daha fazla bilgi için bkz . NuGet paket sürümü. |
Title |
title |
Paketin insan dostu bir başlığı. Varsayılan olarak olur PackageId . |
Description |
description |
Kullanıcı arabiriminde görüntülenen paketin uzun bir açıklaması. |
Authors |
authors |
nuget.org profil adlarını eşleştiren, paket yazarlarının virgülle ayrılmış listesi. |
PackageTags |
tags |
Paketi açıklayan etiketlerin ve anahtar sözcüklerin boşluk veya noktalı virgülle ayrılmış listesi. Etiketler, paketler aranırken kullanılır. |
PackageIcon |
icon |
Paket simgesi olarak kullanılacak paketteki bir görüntünün yolu. Meta veriler hakkında daha fazla bilgi icon edinin. |
PackageProjectUrl |
projectUrl |
Proje giriş sayfasının veya kaynak deposunun URL'si. |
PackageLicenseExpression |
license |
Proje lisansının SPDX tanımlayıcısı. Yalnızca OSI ve FSF onaylı lisanslar bir tanımlayıcı kullanabilir. Diğer lisanslar kullanmalıdır PackageLicenseFile . Meta veriler hakkında daha fazla bilgi license edinin. |
Önemli
Lisansı olmayan bir proje varsayılan olarak özel telif hakkı kullanır ve diğer kişilerin kullanmasını yasal olarak imkansız hale getirir.
✔️ NuGet'in ön ek ayırma ölçütlerini karşılayan bir ön ek içeren bir NuGet paket adı seçmeyi göz önünde bulundurun.
✔️ DO, paket simgenizde HTTPS href kullanın.
NuGet.org GIBI siteler HTTPS etkinken çalıştırılır ve HTTPS olmayan bir görüntü görüntülenirse karma içerik uyarısı oluşturulur.
✔️ DO, 64x64 olan ve en iyi sonuçları görüntülemek için saydam arka plana sahip bir paket simgesi görüntüsü kullanın.
✔️ Derlemelerinize ve NuGet paketinize kaynak denetimi meta verileri eklemek için Kaynak Bağlantısı'nın ayarlanmasını GÖZ ÖNÜNDE BULUNDURUN.
Kaynak Bağlantı, NuGet paketine otomatik olarak ve
RepositoryType
meta verileri eklerRepositoryUrl
. Kaynak Bağlantısı ayrıca paketin oluşturulduğu kaynak kodu hakkında da bilgi ekler. Örneğin, Git deposundan oluşturulan bir pakette işleme karması meta veri olarak eklenir.
Yayın öncesi paketler
Sürüm soneki içeren NuGet paketleri yayın öncesi olarak kabul edilir. Varsayılan olarak NuGet Paket Yöneticisi kullanıcı arabirimi, bir kullanıcı yayın öncesi paketleri kabul etmediği sürece kararlı sürümler gösterir ve bu da yayın öncesi paketleri sınırlı kullanıcı testi için ideal hale getirir.
<PackageVersion>1.0.1-beta1</PackageVersion>
Not
Kararlı bir paket, yayın öncesi pakete bağımlı olamaz. Kendi paketinizi yayından önce oluşturmanız veya eski bir kararlı sürüme bağlı olmanız gerekir.
✔️ TEST, önizleme veya deneme yaparken yayın öncesi bir paket yayımlayın.
✔️ DO, diğer kararlı paketlerin başvurabilmesi için hazır olduğunda kararlı bir paket yayımlayın.
Sembol paketleri
Sembol dosyaları (*.pdb
) derlemelerle birlikte .NET derleyicisi tarafından oluşturulur. Sembol dosyaları yürütme konumlarını özgün kaynak koduyla eşler, böylece kaynak kodun hata ayıklayıcı kullanarak çalışırken adım adım ilerleyebilirsiniz. NuGet, .NET derlemelerini içeren ana paketle birlikte sembol dosyalarını içeren ayrı bir sembol paketi (*.snupkg
) oluşturmayı destekler. Sembol paketleri fikri, bir sembol sunucusunda barındırılıyor olmaları ve yalnızca isteğe bağlı Olarak Visual Studio gibi bir araç tarafından indirilmeleridir.
NuGet.org kendi sembolleri sunucu deposunu barındırıyor. Geliştiriciler, Visual Studio'daki sembol kaynaklarına ekleyerek https://symbols.nuget.org/download/symbols
NuGet.org sembol sunucusunda yayımlanan simgeleri kullanabilir.
Önemli
NuGet.org sembol sunucusu yalnızca SDK stili projeler tarafından oluşturulan yeni taşınabilir simge dosyalarını (*.pdb
) destekler.
.NET kitaplığında hata ayıklarken NuGet.org sembol sunucusunu kullanmak için geliştiricilerin Visual Studio 2017 sürüm 15.9 veya sonraki bir sürümü olmalıdır.
Simge paketi oluşturmanın alternatifi, ana NuGet paketine sembol dosyaları eklemektir. Ana NuGet paketi daha büyük olacaktır, ancak eklenmiş sembol dosyaları geliştiricilerin NuGet.org sembol sunucusunu yapılandırmaları gerekmeyecek anlamına gelir. NuGet paketinizi SDK stilinde bir proje kullanarak oluşturuyorsanız, özelliğini ayarlayarak AllowedOutputExtensionsInPackageBuildOutputFolder
sembol dosyalarını ekleyebilirsiniz:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Include symbol files (*.pdb) in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
</Project>
Sembol dosyalarını eklemenin dezavantajı, SDK stili projeler kullanılarak derlenen .NET kitaplıkları için paket boyutunu yaklaşık %30 artırmalarıdır. Paket boyutu önemliyse, bunun yerine sembolleri bir sembol paketinde yayımlamanız gerekir.
✔️ Sembolleri NuGet.org bir sembol paketi (*.snupkg
) olarak yayımlamayı GÖZ ÖNÜNDE BULUNDURUN
Sembol paketleri (
*.snupkg
) geliştiricilere, ana paket boyutunu şişirmeden ve NuGet paketinde hata ayıklamayı amaçlamayanlar için geri yükleme performansını etkilemeden iyi bir isteğe bağlı hata ayıklama deneyimi sağlar.Uyarı, kullanıcıların simge dosyalarını almak için IDE'lerinde NuGet sembol sunucusunu bulup yapılandırmaları gerekebileceğidir (tek seferlik kurulum olarak). Visual Studio 2019 sürüm 16.1, NuGet.org'un sembol sunucusunu varsayılan sembol sunucuları listesine ekledi.