Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.nupkgund.nuspecDateien aus einem Datenstrom bereit.NuGet.Protocolhä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.
Unterstützungsrichtlinie
Die neueste Version des NuGet Client SDK wird vollständig unterstützt und kann für Fehlerbehebungen, Updates und Verbesserungen verwendet werden.
Es wird empfohlen, die neuesten Versionen von NuGet Client SDK-Paketen zu verwenden und Ihr Projekt auf Abhängigkeiten von veralteten NuGet Client SDK-Paketen zu untersuchen.
Patch-Releases
Patchversionen des NuGet Client SDK werden exklusiv veröffentlicht, wenn wichtige Fehler oder Sicherheitsupdates für eine langfristige Supportversion (LTS) von Visual Studio oder .NET SDK erforderlich sind.
Alle Sicherheitsfehler sollten beim 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, denn die Verantwortung unseres Teams liegt bei den Werkzeugen, nicht bei den Bibliotheken. Weitere Informationen finden Sie in der NuGet SDK-Dokumentation im NuGet.Client-Repository .
Paket-Abschreibung
Nicht unterstützte NuGet-Client-SDK-Pakete, die nicht an eine LTS-Version von Visual Studio oder .NET gebunden sind, werden für nuget.org veraltet.
Der Ansatz für die Paketwartung von NuGet entspricht den Richtlinien für die .NET-Paketwartung (Außerbetriebsetzung).
NuGet.Protocol
Installieren Sie das Paket für die NuGet.Protocol 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 im NuGet.Protocol-Namespace definiert ist. Daher müssen Sie using Anweisungen für beide Namespaces hinzufügen.
Paketversionen auflisten
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}");
}
Herunterladen eines Pakets
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()}");
Abrufen von 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}");
}
Übertragen 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 "hard delete", "soft delete" oder "unlist" interpretieren. Beispielsweise interpretiert nuget.org die Anforderung zum Löschen eines Pakets als eine "Nichtauflistung". 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
NuGet.Protocol wird verwendet, um mit authentifizierten Feeds zu arbeiten.
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 Paket für die NuGet.Packaging 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.
Von Bedeutung
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
Ein Paket aus einem Dateidatenstrom mithilfe von NuGet.Packaging lesen.
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:
- Erkunden der NuGet v3-Bibliotheken, Teil 1: Einführung und Konzepte
- Erkunden der NuGet v3-Bibliotheken, Teil 2: Suchen nach Paketen
- Erkunden der NuGet v3-Bibliotheken, Teil 3: Installieren von Paketen
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: