Share via


NuGet-Client SDK

Das NuGet-Client-SDK bezieht sich auf eine Gruppe von NuGet-Paketen:

  • NuGet.Indexing – Die Indizierungsbibliothek von NuGet für die Clientsuchfunktion von Visual Studio.
  • NuGet.Commands – Vollständige Befehle, die für Befehlszeilen- und GUI-NuGet-Clients verwendet werden.
  • NuGet.Common – Allgemeine Hilfsprogramme und Schnittstellen für alle NuGet-Bibliotheken.
  • NuGet.Configuration – Implementierung der Konfigurationseinstellungen von NuGet.
  • NuGet.Credentials – Die Authentifizierungsmodelle des NuGet-Clients.
  • NuGet.DependencyResolver.Core – Implementierung des PackageReference-Abhängigkeitslösers von NuGet.
  • NuGet.Frameworks – NuGets Verständnis von Zielframeworks.
  • NuGet.LibraryModel – Die Typen und Schnittstellen von NuGet zum Verständnis von Abhängigkeiten.
  • NuGet.Localization – NuGet-Lokalisierungspaket.
  • NuGet.PackageManagement – NuGet-Paketverwaltungsfunktionen für den Visual Studio-Installationsablauf.
  • NuGet.Packaging – Stellt eine Reihe von APIs für die Interaktion mit .nupkg und .nuspec Dateien aus einem Datenstrom bereit. NuGet.Protocol hängt von diesem Paket ab.
  • NuGet.ProjectModel – Die Kerntypen und Schnittstellen von NuGet für die auf PackageReference basierende Wiederherstellung, z. B. Sperrdateien, Ressourcendatei und interne Wiederherstellungsmodelle.
  • NuGet.Protocol – Stellt eine Reihe von APIs bereit, die mit HTTP- und dateibasierten NuGet-Feeds interagieren.
  • NuGet.Resolver – NuGets Abhängigkeitslöser für packages.config-basierte Projekte.
  • NuGet.Versioning – NuGets Implementierung der semantischen Versionsverwaltung.

Den Quellcode für diese Pakete finden Sie im GitHub-Repository NuGet/NuGet.Client.

Hinweis

Dokumentation zum NuGet-Serverprotokoll finden Sie in der NuGet-Server-API.

Supportrichtlinie

Jegliche Sicherheitsfehler sollten dem Microsoft Security Response Center (MSRC) auf der Berichtsseite von MSRC gemeldet werden. Siehe auch die Sicherheitsrichtlinie im NuGet.Client-Repository.

Wir garantieren keine API-Stabilität, da der Verantwortungsbereich unseres Teams das Tooling, nicht aber die Bibliotheken umfasst. Weitere Informationen finden Sie in der NuGet SDK-Dokumentation im NuGet.Client-Repository.

NuGet.Protocol

Installieren Sie das NuGet.Protocol Paket für die Interaktion mit HTTP- und ordnerbasierten NuGet-Paketfeeds:

dotnet add package NuGet.Protocol

Den Quellcode für diese Beispiele finden Sie im Projekt NuGet.Protocol.Samples auf GitHub.

Tipp

Repository.Factory wird im NuGet.Protocol.Core.Types Namespace definiert, und die GetCoreV3 Methode ist eine Erweiterungsmethode, die NuGet.Protocol im Namespace definiert ist. Daher müssen Sie using Anweisungen für beide Namespaces hinzufügen.

Abrufen von Paketversionen

Suchen Sie alle Versionen von Newtonsoft.Json mithilfe der NuGet V3-Paketinhalts-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");
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 herunterladen

Laden Sie Newtonsoft.Json v12.0.1 mithilfe der NuGet V3-Paketinhalts-API herunter:

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

Paketmetadaten

Rufen Sie die Metadaten für das Paket Newtonsoft.Json mithilfe der NuGet V3-Paketmetadaten-API ab:

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

Suchen von Paketen

Suchen Sie mithilfe der NuGet V3-Such-API nach json-Paketen:

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

Pushen eines Pakets

Übertragen eines Pakets mithilfe der NuGet V3-Push- und Lösch-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);

Löschen eines Pakets

Löschen eines Pakets mithilfe der NuGet V3-Push- und Lösch-API:

Hinweis

NuGet-Server können eine Paketlöschanforderung als „endgültiges Löschen“, „vorläufiges Löschen“ oder „unlist“ interpretieren. Beispielsweise interpretiert nuget.org die Paketlöschanforderung als Unlist. Weitere Informationen zu dieser Vorgehensweise finden Sie in der Richtlinie zum Löschen von Paketen .

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

Arbeiten mit authentifizierten Feeds

Nutzen Sie NuGet.Protocol zum Arbeiten mit authentifizierten Feeds

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

Installieren Sie das NuGet.Packaging Paket für die Interaktion mit .nupkg und .nuspec Dateien aus einem Stream:

dotnet add package NuGet.Packaging

Erstellen eines Pakets

Erstellen Eines Pakets, Festlegen von Metadaten und Hinzufügen von Abhängigkeiten mithilfe von NuGet.Packaging.

Wichtig

Es wird dringend empfohlen, NuGet-Pakete mithilfe des offiziellen NuGet-Tools zu erstellen und diese API auf niedriger Ebene nicht zu verwenden. Es gibt eine Vielzahl von Merkmalen, die für ein wohlgeformtes Paket wichtig sind, und die neueste Version der Tools hilft bei der Integration dieser bewährten Methoden.

Weitere Informationen zum Erstellen von NuGet-Paketen finden Sie in der Übersicht über den Paketerstellungsworkflow und die Dokumentation für offizielle Packtools (z. B. mithilfe der dotnet CLI).

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

Lesen eines Pakets

Lesen eines Pakets aus einem Dateidatenstrom mithilfe von 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}");
}

Dokumentation von Drittanbietern

Beispiele und Dokumentationen für einige der API finden Sie in der folgenden Blogreihe von Dave Glick, veröffentlicht 2016:

Hinweis

Diese Blogbeiträge wurden kurz nach der 3.4.3-Version der NuGet-Client-SDK-Pakete veröffentlicht. Neuere Versionen der Pakete sind möglicherweise nicht mit den Informationen in den Blogbeiträgen kompatibel.

Martin Björkström hat einen Nachverfolgungsblogbeitrag zu Dave Glicks Blogreihe gemacht, in der er einen anderen Ansatz bei der Verwendung des NuGet Client SDK zum Installieren von NuGet-Paketen einführt: