İngilizce dilinde oku

Aracılığıyla paylaş


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.

Not

NuGet sunucu protokolüyle ilgili belgeler için lütfen NuGet Server API'sine bakın.

Destek ilkesi

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.

Düzeltme Eki Sürümleri

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.

Paket Kullanımdan Kaldır

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

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.

Paket sürümlerini listeleme

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}");
}

Paket indirme

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()}");

Paket meta verilerini alma

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}");
}

Arama paketleri

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}");
}

Paket gönderme

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);

Paketi silme

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ışma

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

NuGet.Packaging Bir akıştan ve .nuspec dosyalarıyla .nupkg etkileşim kurmak için paketi yükleyin:

dotnet add package NuGet.Packaging

Paket oluşturma

kullanarak NuGet.Packagingbir 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}");

Paketi okuma

kullanarak NuGet.Packagingbir 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}");
}

Üçüncü taraf belgeleri

2016'da yayımlanan Dave Glick'in aşağıdaki blog serisinde API'nin bazı örneklerine ve belgelerine ulaşabilirsiniz:

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ı: