次の方法で共有


NuGet クライアント SDK

NuGet クライアント SDK は、NuGet パッケージのグループをリファレンスします。

  • NuGet.Indexing - Visual Studio クライアント検索機能用の NuGet のインデックス作成ライブラリ。
  • NuGet.Commands - コマンド ライン クライアントと GUI NuGet クライアントに共通のコマンドを完了します。
  • NuGet.Common - すべての NuGet ライブラリの一般的なユーティリティとインターフェイス。
  • NuGet.Configuration - NuGet の構成セットの実装。
  • NuGet.Credentials - NuGet クライアント認証モデル。
  • NuGet.DependencyResolver.Core - NuGet の PackageReference 依存関係リゾルバーの実装。
  • NuGet.Frameworks - ターゲット フレームワークに対する NuGet の解釈。
  • NuGet.LibraryModel - 依存関係を解釈するための NuGet のTYPEとインターフェイス。
  • NuGet.Localization - NuGet ローカライズ パッケージ。
  • NuGet.PackageManagement - Visual Studio インストール フロー用の NuGet パッケージ マネージャー機能。
  • NuGet.Packaging - ストリームからの.nupkg.nuspecファイルとやり取 りする API セットを提供。 NuGet.Protocol はこのパッケージに依存します。
  • NuGet.ProjectModel - ロックされたファイル、アセット ファイル、内部復元モデルなど、PackageReference ベースの復元用の NuGet のコアTYPEとインターフェイス。
  • NuGet.Protocol - 一連の API が HTTP およびファイル ベースの NuGet フィードと対話できるようにします。
  • NuGet.Resolver - packages.config ベースのプロジェクトに対する NuGet の依存関係リゾルバー。
  • NuGet.Versioning - NuGet のセマンセマンティック バージョニング管理の実装。

これらのパッケージのソース コードは、NuGet/NuGet.Client GitHub リポジトリにあります

Note

NuGet サーバー プロトコルのドキュメントについては、NuGet サーバー API参照してください。

サポート ポリシー

最新バージョンの NuGet クライアント SDK は完全にサポートされており、バグ修正、更新、および機能強化で信頼できます。

推奨事項は、最新バージョンの NuGet クライアント SDK パッケージを使用し、非推奨の NuGet クライアント SDK パッケージへの依存関係についてプロジェクトを調べることです。

パッチ リリース

NuGet クライアント SDK の修正プログラムが適用されたバージョンは、Visual Studio または .NET SDK の長期サポート (LTS) バージョンに重大なバグまたはセキュリティ修正プログラムが必要な場合にのみリリースされます。

のセキュリティ バグは、MSRC のレポート ページから、Microsoft Security Response Center (MSRC) に報告する必要があります。 また、「NuGet.Client リポジトリのセキュリティ ポリシー」も参照してください。

チームはライブラリではなくツールの扱いに責任を負うため、API の安定性は保証しかねます。 詳細については、「NuGet.Client リポジトリ の NuGet SDK ドキュメント」を参照してください。

パッケージの非推奨

Visual Studio または .NET の LTS バージョンに関連付けられていないサポート対象外の NuGet クライアント SDK パッケージは、nuget.org で非推奨になります。

NuGet のパッケージ メインテナント アプローチは、.NET パッケージ メンテナンス (非推奨) ガイダンスに従う予定です。

NuGet.Protocol

HTTP とフォルダーベースの NuGet パッケージ フィードと対話するNuGet.Protocolパッケージをインストールします。

dotnet add package NuGet.Protocol

これらの例のソース コードは、GitHub の NuGet.Protocol.Samples プロジェクトにあります。

ヒント

Repository.FactoryNuGet.Protocol.Core.Types名前空間で定義され、メソッド GetCoreV3NuGet.Protocol名前空間で定義された拡張メソッドです。 そのため、両方の名前空間のステートメントを追加 using する必要があります。

パッケージのバージョンリスト

NuGet V3 パッケージ コンテンツ API を使用して、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}");
}

パッケージのダウンロード

NuGet V3 パッケージ コンテンツ API を使用して Newtonsoft.Json v12.0.1 をダウンロード。

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

パッケージメタデータ取得

NuGet V3 パッケージ メタデータ APIを使用して、"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}");
}

パッケージの検索

NuGet V3 Search API を使用して "json" パッケージを検索します。

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

パッケージをプッシュする

NuGet V3 プッシュ API と 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);

パッケージを削除する

NuGet V3 プッシュ API と Delete API を使用してパッケージを削除します。

Note

NuGet サーバーは、パッケージ削除要求を "ハード削除"、"論理的な削除"、または "リストから削除" として自由に解釈できます。 例えば、nuget.org はパッケージ削除要求を "unlist" と解釈します。 この方法の詳細については、「パッケージ削除」ポリシーを参照してください。

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

認証されたフィードを使用する

認証されたフィードで作業するために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

ストリームから.nupkg.nuspecファイルと対話するNuGet.Packagingパッケージをインストールします。

dotnet add package NuGet.Packaging

パッケージを作成する

NuGet.Packagingを使用してパッケージを作成し、メタデータを設定し、依存関係を追加します。

重要

この低レベルの API を使用せず、公式の NuGet ツールを使用して NuGet パッケージを作成することを強くお勧めします。 整形式パッケージにはさまざまな特性が重要であり、最新バージョンのツールは、これらのベスト プラクティスを組み込むのに役立ちます。

NuGet パッケージの作成の詳細については、パッケージ作成ワークフロー概要と公式パック ツールのドキュメントを参照してください (例えば、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}");

パッケージ読み取り

を使用してファイル ストリームからパッケージを 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}");
}

サード パーティのドキュメント

一部の API の例とドキュメントは、2016 年に公開された Dave Glick の次のブログ シリーズにあります。

Note

これらのブログ投稿は、NuGet クライアント SDK パッケージの 3.4.3 バージョンがリリースされた直後に書かれています。 新しいバージョンのパッケージは、ブログ記事の情報と互換性がない可能性があります。

Martin Björkström は Dave Glick のブログ シリーズのフォローアップ ブログ投稿を行い、NuGet クライアント SDK を使用して NuGet パッケージをインストールする別のアプローチを紹介しました。