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 を参照してください。
サポート ポリシー
のセキュリティ バグは、MSRC のレポート ページから、Microsoft Security Response Center (MSRC) に報告する必要があります。 また、「NuGet.Client リポジトリのセキュリティ ポリシー」も参照してください。
チームはライブラリではなくツールの扱いに責任を負うため、API の安定性は保証しかねます。 詳細については、「NuGet.Client リポジトリ の NuGet SDK ドキュメント」を参照してください。
NuGet.Protocol
HTTP とフォルダーベースの NuGet パッケージ フィードと対話するNuGet.Protocol
パッケージをインストールします。
dotnet add package NuGet.Protocol
これらの例のソース コードは、GitHub の NuGet.Protocol.Samples プロジェクトにあります。
ヒント
Repository.Factory
はNuGet.Protocol.Core.Types
名前空間で定義され、メソッド GetCoreV3
はNuGet.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 の次のブログ シリーズにあります。
- NuGet v3 ライブラリの探索、パート 1: はじめにと用語
- NuGet v3 ライブラリの探索、パート 2: パッケージ検索
- NuGet v3 ライブラリの探索、パート 3: パッケージインストール
Note
これらのブログ投稿は、NuGet クライアント SDK パッケージの 3.4.3 バージョンがリリースされた直後に書かれています。 新しいバージョンのパッケージは、ブログ記事の情報と互換性がない可能性があります。
Martin Björkström は Dave Glick のブログ シリーズのフォローアップ ブログ投稿を行い、NuGet クライアント SDK を使用して NuGet パッケージをインストールする別のアプローチを紹介しました。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示