Sdílet prostřednictvím


Sada SDK pro klienta NuGet

Klientská sada SDK NuGet odkazuje na skupinu balíčků NuGet:

  • NuGet.Indexing – Knihovna indexování NuGet pro funkci vyhledávání klienta sady Visual Studio.
  • NuGet.Commands – Kompletní příkazy společné pro klienty NuGet příkazového řádku a grafického uživatelského rozhraní.
  • NuGet.Common – Společné nástroje a rozhraní pro všechny knihovny NuGet.
  • NuGet.Configuration – Implementace nastavení konfigurace NuGetu
  • NuGet.Credentials – Modely ověřování klienta NuGet.
  • NuGet.DependencyResolver.Core – Implementace kompilátoru závislostí PackageReference NuGet
  • NuGet.Frameworks – NuGet rozumí cílovým architekturám.
  • NuGet.LibraryModel – Typy a rozhraní NuGetu pro pochopení závislostí.
  • NuGet.Localization – Lokalizační balíček NuGet.
  • NuGet.PackageManagement – Funkce správy balíčků NuGet pro tok instalace sady Visual Studio.
  • NuGet.Packaging – Poskytuje sadu rozhraní API pro interakci se .nupkg.nuspec soubory ze streamu. NuGet.Protocol závisí na tomto balíčku.
  • NuGet.ProjectModel – Základní typy a rozhraní NuGetu pro obnovení založené na PackageReference, jako jsou soubory zámků, soubory prostředků a interní modely obnovení.
  • NuGet.Protocol – Poskytuje sadu rozhraní API pro interakci s informačními kanály NuGet založenými na protokolu HTTP a souborech.
  • NuGet.Resolver – Překladač závislostí NuGet pro projekty založené na packages.config.
  • NuGet.Versioning – Implementace sémantické správy verzí NuGet.

Zdrojový kód pro tyto balíčky najdete v úložišti NuGet/NuGet.Client GitHub.

Poznámka:

Dokumentaci k protokolu serveru NuGet najdete v rozhraní API serveru NuGet.

Zásady podpory

Nejnovější verze klientské sady SDK NuGet je plně podporovaná a může se spoléhat na opravy chyb, aktualizace a vylepšení.

Doporučuje se používat nejnovější verze balíčků klientské sady SDK NuGet a prozkoumat projekt závislostí na zastaralých balíčcích sdk klienta NuGet.

Vydání oprav

Opravené verze klientské sady SDK NuGet budou vydány výhradně v případě, že se vyžadují kritické chyby nebo opravy zabezpečení pro dlouhodobou podporu (LTS) sady Visual Studio nebo .NET SDK.

Všechny chyby zabezpečení by měly být hlášeny do centra Microsoft Security Response Center (MSRC) na stránce sestavy MSRC. Podívejte se také na zásady zabezpečení v úložišti NuGet.Client.

Nezaručujeme stabilitu rozhraní API, protože odpovědnost našeho týmu je nástroje, nikoli knihovny. Další informace najdete v dokumentaci k sadě NuGet SDK v úložišti NuGet.Client.

Vyřazení balíčku

Balíčky sady NuGet Client SDK, které nejsou svázané s verzí LTS sady Visual Studio nebo .NET, se v nuget.org přestanou podporovat.

Přístup k údržbě balíčků NuGet bude odpovídat pokynům k údržbě balíčků .NET (vyřazení).

NuGet.Protocol

NuGet.Protocol Nainstalujte balíček pro interakci s kanály balíčků NuGet založenými na http a složkách:

dotnet add package NuGet.Protocol

Zdrojový kód pro tyto příklady najdete v projektu NuGet.Protocol.Samples na GitHubu.

Tip

Repository.Factory je definován v NuGet.Protocol.Core.Types oboru názvů a GetCoreV3 metoda je rozšiřující metoda definovaná v NuGet.Protocol oboru názvů. Proto budete muset přidat using příkazy pro oba obory názvů.

Výpis verzí balíčků

Pomocí rozhraní API obsahu balíčku NuGet V3 vyhledejte všechny verze Newtonsoft.Json:

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

Stažení balíčku

Stáhněte si Newtonsoft.Json v12.0.1 pomocí rozhraní API obsahu balíčku NuGet V3:

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

Získání metadat balíčku

Pomocí rozhraní API metadat balíčku NuGet V3 získejte metadata balíčku Newtonsoft.Json:

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

Vyhledávací balíčky

Vyhledejte balíčky json pomocí rozhraní NUGet V3 Search API:

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

Nasdílení balíčku

Nasdílení balíčku pomocí rozhraní NUGet V3 Push and Delete API:

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

Odstranění balíčku

Odstraňte balíček pomocí rozhraní NUGet V3 Push and Delete API:

Poznámka:

Servery NuGet mohou požadavek na odstranění balíčku interpretovat jako "pevné odstranění", "obnovitelné odstranění" nebo "unlist". Například nuget.org interpretuje požadavek na odstranění balíčku jako "unlist". Další informace o tomto postupu najdete v zásadách odstraňování balíčků .

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

Práce s ověřenými informačními kanály

Slouží NuGet.Protocol k práci s ověřenými informačními kanály.

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 Nainstalujte balíček pro interakci se .nupkg soubory ze .nuspec streamu:

dotnet add package NuGet.Packaging

Vytvoření balíčku

Vytvořte balíček, nastavte metadata a přidejte závislosti pomocí NuGet.Packaging.

Důležité

Důrazně doporučujeme, aby se balíčky NuGet vytvářely pomocí oficiálního nástroje NuGet, a ne pomocí tohoto rozhraní API nízké úrovně. Pro dobře vytvořený balíček a nejnovější verzi nástrojů je důležitá řada charakteristik, které vám pomůžou tyto osvědčené postupy začlenit.

Další informace o vytváření balíčků NuGet najdete v přehledu pracovního postupu vytváření balíčků a dokumentaci pro oficiální nástroje balíčků (například pomocí rozhraní příkazového řádku dotnet).

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

Čtení balíčku

Čtení balíčku ze streamu souboru pomocí NuGet.Packaging.

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

Dokumentace třetích stran

Příklady a dokumentace pro některé z rozhraní API najdete v následujícím blogovém seriálu, který publikoval Dave Glick, publikováno 2016:

Poznámka:

Tyto blogové příspěvky byly napsány krátce po vydání verze 3.4.3 balíčků klientské sady SDK NuGet. Novější verze balíčků můžou být nekompatibilní s informacemi v blogových příspěvcích.

Martin Björkström provedl následný blogový příspěvek na řadu blogů Dave Glick, kde zavádí jiný přístup k použití klientské sady SDK NuGet k instalaci balíčků NuGet: