NuGet İstemci SDK’sı
NuGet İstemci SDK'sı bir grup NuGet paketine başvurur:
NuGet.Indexing
- Visual Studio istemci arama işlevi için NuGet'in dizin kitaplığı.NuGet.Commands
- Komut satırı ve GUI NuGet istemcilerinin ortak olduğu komutları tamamlayın.NuGet.Common
- Tüm NuGet kitaplıkları için ortak yardımcı programlar ve arabirimler.NuGet.Configuration
- NuGet'in yapılandırma ayarları uygulaması.NuGet.Credentials
- NuGet istemcisinin kimlik doğrulama modelleri.NuGet.DependencyResolver.Core
- NuGet'in PackageReference bağımlılık çözümleyicisi uygulaması.NuGet.Frameworks
- NuGet'in hedef çerçeveleri anlama biçimi.NuGet.LibraryModel
- Bağımlılıkları anlamak için NuGet'in türleri ve arabirimleri.NuGet.Localization
- NuGet yerelleştirme paketi.NuGet.PackageManagement
- Visual Studio yükleme akışı için NuGet Paket Yönetimi işlevselliği.NuGet.Packaging
- Bir akıştan ve.nuspec
dosyalarıyla.nupkg
etkileşim kurmak için bir dizi API sağlar.NuGet.Protocol
bu pakete bağlıdır.NuGet.ProjectModel
- Kilit dosyaları, varlık dosyası ve iç geri yükleme modelleri gibi PackageReference tabanlı geri yükleme için NuGet'in temel türleri ve arabirimleri.NuGet.Protocol
- HTTP ve dosya tabanlı NuGet akışlarıyla etkileşim kuran bir dizi API sağlar.NuGet.Resolver
- Packages.config tabanlı projeler için NuGet'in bağımlılık çözümleyicisi.NuGet.Versioning
- NuGet'in AnlamSal Sürüm Oluşturma uygulaması.
Bu paketlerin kaynak kodunu NuGet/NuGet.Client GitHub deposunda bulabilirsiniz.
NuGet İstemci SDK'sının en son sürümü tam olarak desteklenir ve hata düzeltmeleri, güncelleştirmeler ve geliştirmeler için kullanılabilir.
Öneri, NuGet İstemci SDK paketlerinin en son sürümlerini kullanmak ve projenizi kullanım dışı bırakılan NuGet İstemci SDK'sı paketlerine bağımlılıklar açısından incelemektir.
Visual Studio veya .NET SDK'nın uzun süreli destek (LTS) sürümü için kritik hatalar veya güvenlik düzeltmeleri gerektiğinde, NuGet İstemci SDK'sının düzeltme eki uygulanmış sürümleri özel olarak yayımlanır.
Tüm güvenlik hataları MSRC'nin rapor sayfasında Microsoft Güvenlik Yanıt Merkezi'ne (MSRC) bildirilmelidir. Ayrıca NuGet.Client deposundaki güvenlik ilkesine bakın.
Api kararlılığını garanti etmeyiz çünkü ekibimizin sorumluluğu kitaplıklar değil araçlardır. Daha fazla bilgi için NuGet.Client deposundaki NuGet SDK belgelerine bakın.
Visual Studio veya .NET'in LTS sürümüne bağlı olmayan destek dışı NuGet İstemci SDK'sı paketleri nuget.org'de kullanım dışı bırakılacaktır.
NuGet'in paket bakım yaklaşımı .NET Paket Bakımı (kullanımdan kaldırma) kılavuzuyla uyumlu olacaktır.
NuGet.Protocol
HTTP ve klasör tabanlı NuGet paket akışlarıyla etkileşim kurmak için paketi yükleyin:
dotnet add package NuGet.Protocol
Bu örneklerin kaynak kodunu GitHub'da NuGet.Protocol.Samples projesinde bulabilirsiniz.
İpucu
Repository.Factory
ad alanında NuGet.Protocol.Core.Types
tanımlanır ve GetCoreV3
yöntemi ad alanında NuGet.Protocol
tanımlanan bir uzantı yöntemidir. Bu nedenle, her iki ad alanı için de deyimler eklemeniz using
gerekir.
NuGet V3 Paket İçeriği API'sini kullanarak Tüm Newtonsoft.Json sürümlerini bulun:
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
FindPackageByIdResource resource = await repository.GetResourceAsync<FindPackageByIdResource>();
IEnumerable<NuGetVersion> versions = await resource.GetAllVersionsAsync(
"Newtonsoft.Json",
cache,
logger,
cancellationToken);
foreach (NuGetVersion version in versions)
{
Console.WriteLine($"Found version {version}");
}
NuGet V3 Paket İçeriği API'sini kullanarak Newtonsoft.Json v12.0.1 sürümünü indirin:
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
FindPackageByIdResource resource = await repository.GetResourceAsync<FindPackageByIdResource>();
string packageId = "Newtonsoft.Json";
NuGetVersion packageVersion = new NuGetVersion("12.0.1");
using MemoryStream packageStream = new MemoryStream();
await resource.CopyNupkgToStreamAsync(
packageId,
packageVersion,
packageStream,
cache,
logger,
cancellationToken);
Console.WriteLine($"Downloaded package {packageId} {packageVersion}");
using PackageArchiveReader packageReader = new PackageArchiveReader(packageStream);
NuspecReader nuspecReader = await packageReader.GetNuspecReaderAsync(cancellationToken);
Console.WriteLine($"Tags: {nuspecReader.GetTags()}");
Console.WriteLine($"Description: {nuspecReader.GetDescription()}");
NuGet V3 Paketi Meta Veri API'sini kullanarak "Newtonsoft.Json" paketinin meta verilerini alın:
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageMetadataResource resource = await repository.GetResourceAsync<PackageMetadataResource>();
IEnumerable<IPackageSearchMetadata> packages = await resource.GetMetadataAsync(
"Newtonsoft.Json",
includePrerelease: true,
includeUnlisted: false,
cache,
logger,
cancellationToken);
foreach (IPackageSearchMetadata package in packages)
{
Console.WriteLine($"Version: {package.Identity.Version}");
Console.WriteLine($"Listed: {package.IsListed}");
Console.WriteLine($"Tags: {package.Tags}");
Console.WriteLine($"Description: {package.Description}");
}
NuGet V3 Arama API'sini kullanarak "json" paketlerini arayın:
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageSearchResource resource = await repository.GetResourceAsync<PackageSearchResource>();
SearchFilter searchFilter = new SearchFilter(includePrerelease: true);
IEnumerable<IPackageSearchMetadata> results = await resource.SearchAsync(
"json",
searchFilter,
skip: 0,
take: 20,
logger,
cancellationToken);
foreach (IPackageSearchMetadata result in results)
{
Console.WriteLine($"Found package {result.Identity.Id} {result.Identity.Version}");
}
NuGet V3 Gönderme ve Silme API'sini kullanarak paket gönderme:
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageUpdateResource resource = await repository.GetResourceAsync<PackageUpdateResource>();
string apiKey = "my-api-key";
await resource.Push(
"MyPackage.nupkg",
symbolSource: null,
timeoutInSecond: 5 * 60,
disableBuffering: false,
getApiKey: packageSource => apiKey,
getSymbolApiKey: packageSource => null,
noServiceEndpoint: false,
skipDuplicate: false,
symbolPackageUpdateResource: null,
logger);
NuGet V3 Gönderme ve Silme API'sini kullanarak paketi silme:
Not
NuGet sunucuları, paket silme isteğini "sabit silme", "geçici silme" veya "listeden çıkar" olarak yorumlamaya ücretsizdir. Örneğin, nuget.org paket silme isteğini "liste dışı" olarak yorumlar. Bu uygulama hakkında daha fazla bilgi için Bkz . Paketleri Silme ilkesi.
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageUpdateResource resource = await repository.GetResourceAsync<PackageUpdateResource>();
string apiKey = "my-api-key";
await resource.Delete(
"MyPackage",
"1.0.0-beta",
getApiKey: packageSource => apiKey,
confirm: packageSource => true,
noServiceEndpoint: false,
logger);
Kimliği doğrulanmış akışlarla çalışmak için kullanın NuGet.Protocol
.
ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
var sourceUri = "https://contoso.privatefeed/v3/index.json";
var packageSource = new PackageSource(sourceUri)
{
Credentials = new PackageSourceCredential(
source: sourceUri,
username: "myUsername",
passwordText: "myVerySecretPassword",
isPasswordClearText: true,
validAuthenticationTypesText: null)
};
// If the `SourceRepository` is created with a `PackageSource`, the rest of APIs will consume the credentials attached to `PackageSource.Credentials`.
SourceRepository repository = Repository.Factory.GetCoreV3(packageSource);
PackageMetadataResource resource = await repository.GetResourceAsync<PackageMetadataResource>();
IEnumerable<IPackageSearchMetadata> packages = await resource.GetMetadataAsync(
"MyPackage",
includePrerelease: true,
includeUnlisted: false,
cache,
logger,
cancellationToken);
foreach (IPackageSearchMetadata package in packages)
{
Console.WriteLine($"Version: {package.Identity.Version}");
Console.WriteLine($"Listed: {package.IsListed}");
Console.WriteLine($"Tags: {package.Tags}");
Console.WriteLine($"Description: {package.Description}");
}
NuGet.Packaging
Bir akıştan ve .nuspec
dosyalarıyla .nupkg
etkileşim kurmak için paketi yükleyin:
dotnet add package NuGet.Packaging
kullanarak NuGet.Packaging
bir paket oluşturun, meta verileri ayarlayın ve bağımlılıklar ekleyin.
Önemli
NuGet paketlerinin resmi NuGet araçları kullanılarak oluşturulması ve bu düşük düzey API'yi kullanmaması kesinlikle önerilir. İyi biçimlendirilmiş bir paket için önemli olan çeşitli özellikler vardır ve araçların en son sürümü bu en iyi yöntemlerin dahil edilmesine yardımcı olur.
NuGet paketleri oluşturma hakkında daha fazla bilgi için paket oluşturma iş akışına genel bakışa ve resmi paket araçlarına (örneğin dotnet CLI kullanarak) yönelik belgelere bakın.
PackageBuilder builder = new PackageBuilder();
builder.Id = "MyPackage";
builder.Version = new NuGetVersion("1.0.0-beta");
builder.Description = "My package created from the API.";
builder.Authors.Add("Sample author");
builder.DependencyGroups.Add(new PackageDependencyGroup(
targetFramework: NuGetFramework.Parse("netstandard1.4"),
packages: new[]
{
new PackageDependency("Newtonsoft.Json", VersionRange.Parse("10.0.1"))
}));
using FileStream outputStream = new FileStream("MyPackage.nupkg", FileMode.Create);
builder.Save(outputStream);
Console.WriteLine($"Saved a package to {outputStream.Name}");
kullanarak NuGet.Packaging
bir dosya akışından paket okuyun.
using FileStream inputStream = new FileStream("MyPackage.nupkg", FileMode.Open);
using PackageArchiveReader reader = new PackageArchiveReader(inputStream);
NuspecReader nuspec = reader.NuspecReader;
Console.WriteLine($"ID: {nuspec.GetId()}");
Console.WriteLine($"Version: {nuspec.GetVersion()}");
Console.WriteLine($"Description: {nuspec.GetDescription()}");
Console.WriteLine($"Authors: {nuspec.GetAuthors()}");
Console.WriteLine("Dependencies:");
foreach (var dependencyGroup in nuspec.GetDependencyGroups())
{
Console.WriteLine($" - {dependencyGroup.TargetFramework.GetShortFolderName()}");
foreach (var dependency in dependencyGroup.Packages)
{
Console.WriteLine($" > {dependency.Id} {dependency.VersionRange}");
}
}
Console.WriteLine("Files:");
foreach (var file in reader.GetFiles())
{
Console.WriteLine($" - {file}");
}
2016'da yayımlanan Dave Glick'in aşağıdaki blog serisinde API'nin bazı örneklerine ve belgelerine ulaşabilirsiniz:
- NuGet v3 Kitaplıklarını Keşfetme, Bölüm 1: Giriş ve kavramlar
- NuGet v3 Kitaplıklarını Keşfetme, Bölüm 2: Paketleri arama
- NuGet v3 Kitaplıklarını Keşfetme, Bölüm 3: Paketleri yükleme
Not
Bu blog gönderileri, NuGet istemci SDK paketlerinin 3.4.3 sürümü yayımlandıktan kısa bir süre sonra yazılmıştır. Paketlerin daha yeni sürümleri blog gönderilerindeki bilgilerle uyumsuz olabilir.
Martin Björkström, Dave Glick'in NuGet paketlerini yüklemek için NuGet İstemci SDK'sını kullanma konusunda farklı bir yaklaşım tanıttığı blog serisine bir takip blog gönderisi yaptı: