Kit SDK du client NuGet
Le Kit de développement logiciel (SDK) client NuGet fait référence à un groupe de packages NuGet :
NuGet.Indexing
- Bibliothèque d’indexation de NuGet pour la fonctionnalité de recherche du client Visual Studio.NuGet.Commands
- Commandes complètes communes aux clients NuGet de ligne de commande et d’interface utilisateur graphique.NuGet.Common
- Utilitaires et interfaces courants pour toutes les bibliothèques NuGet.NuGet.Configuration
- Implémentation des paramètres de configuration de NuGet.NuGet.Credentials
- Modèles d’authentification du client NuGet.NuGet.DependencyResolver.Core
- Implémentation du programme de résolution de dépendances PackageReference de NuGet.NuGet.Frameworks
- Compréhension de NuGet des versions cibles de .Net Framework.NuGet.LibraryModel
- Types et interfaces de NuGet pour la compréhension des dépendances.NuGet.Localization
- Package de localisation NuGet.NuGet.PackageManagement
- Fonctionnalité Package Management de NuGet pour le flux d’installation de Visual Studio.NuGet.Packaging
- Fournit un ensemble d’API permettant d’interagir avec les fichiers.nupkg
et.nuspec
à partir d’un flux.NuGet.Protocol
dépend de ce package.NuGet.ProjectModel
- Types et interfaces principaux de NuGet pour la restauration basée sur PackageReference, tels que les fichiers de verrouillage, les fichiers de ressources et les modèles de restauration interne.NuGet.Protocol
- Fournit un ensemble d’API interagissent avec les flux NuGet HTTP et basés sur des fichiers.NuGet.Resolver
- Programme de résolution des dépendances de NuGet pour les projets basés sur packages.config.NuGet.Versioning
- Implémentation de la Gestion sémantique de version par NuGet.
Vous trouverez le code source de ces packages dans le référentiel GitHub NuGet/NuGet.Client.
Remarque
Pour obtenir de la documentation sur le protocole du serveur NuGet, reportez-vous à l’API serveur NuGet.
Politique de support
Tous les bogues de sécurité doivent être signalés au Centre de réponse aux problèmes de sécurité Microsoft (MSRC) sur la page de rapport de MSRC. Consultez également la stratégie de sécurité dans le référentiel NuGet.Client.
Nous ne garantissons pas la stabilité des API, car la responsabilité de notre équipe est l’outil, et non les bibliothèques. Pour plus d’informations, consultez la documentation du Kit de développement logiciel (SDK) NuGet dans le référentiel NuGet.Client.
NuGet.Protocol
Installez le package NuGet.Protocol
pour interagir avec les flux de package NuGet HTTP et basés sur des dossiers :
dotnet add package NuGet.Protocol
Vous trouverez le code source de ces exemples sur le projet NuGet.Protocol.Samples sur GitHub.
Conseil
Repository.Factory
est défini dans l’espace de noms NuGet.Protocol.Core.Types
et la méthode GetCoreV3
est une méthode d’extension définie dans l’espace de noms NuGet.Protocol
. Par conséquent, vous devez ajouter des instructions using
pour les deux espaces de noms.
Répertorier des versions de packages
Recherchez toutes les versions de Newtonsoft.Json à l’aide de l’API de contenu du package 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>();
IEnumerable<NuGetVersion> versions = await resource.GetAllVersionsAsync(
"Newtonsoft.Json",
cache,
logger,
cancellationToken);
foreach (NuGetVersion version in versions)
{
Console.WriteLine($"Found version {version}");
}
Télécharger un package
Téléchargez Newtonsoft.Json v12.0.1 à l’aide de l’API de contenu du package 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()}");
Obtenir les métadonnées de package
Obtenez les métadonnées du package « Newtonsoft.Json » à l’aide de l’API de métadonnées de package 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");
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}");
}
Rechercher des packages
Recherchez des packages « json » à l’aide de l’API de recherche NuGet V3 :
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}");
}
Envoyer un package
Envoyez (push) un package à l’aide de l’API Envoyer et supprimer de 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");
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);
Supprimer un package
Supprimez un package à l’aide de l’API Envoyer et supprimer de NuGet V3 :
Remarque
Les serveurs NuGet sont libres d’interpréter une demande de suppression de package comme « suppression définitive », « suppression réversible » ou « retrait de la liste ». Par exemple, nuget.org interprète la demande de suppression de package en tant que « retrait de la liste ». Pour plus d’informations sur cette pratique, consultez la stratégie Suppression de packages.
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);
Utiliser des flux authentifiés
Utilisez des flux authentifiés à l’aide de 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
Installez le package NuGet.Packaging
pour interagir avec des fichiers .nupkg
et .nuspec
à partir d’un flux :
dotnet add package NuGet.Packaging
Créer un package
Créez un package, définissez des métadonnées et ajoutez des dépendances à l’aide de NuGet.Packaging
.
Important
Il est fortement recommandé de créer des packages NuGet à l’aide des outils NuGet officiels et de ne pas utiliser cette API de bas niveau. Il existe diverses caractéristiques importantes pour un package bien formé et la dernière version des outils permet d’incorporer ces meilleures pratiques.
Pour plus d’informations sur la création de packages NuGet, consultez la vue d’ensemble du flux de travail de création de package et la documentation relative aux outils de pack officiels (par exemple, à l’aide de l’interface CLI 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}");
Lire un package
Lire un package à partir d’un flux de fichiers à l’aide de 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}");
}
Documentation de tiers
Vous trouverez des exemples et de la documentation pour certaines des API dans la série de blogs suivante de Dave Glick, publié en 2016 :
- Exploration des bibliothèques NuGet v3, partie 1 : Introduction et concepts
- Exploration des bibliothèques NuGet v3, partie 2 : Recherche de packages
- Exploration des bibliothèques NuGet v3, partie 3 : Installation de packages
Remarque
Ces billets de blog ont été écrits peu après la publication de la version 3.4.3 des packages du Kit de développement logiciel (SDK) client NuGet. Les versions plus récentes des packages peuvent être incompatibles avec les informations contenues dans les billets de blog.
Martin Björkström a créé un billet de blog de suivi sur la série de blogs de Dave Glick où il présente une approche différente sur l’utilisation du Kit de développement logiciel (SDK) client NuGet pour installer des packages NuGet :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour