添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • NuGet.Indexing - NuGet 的 Visual Studio 用戶端搜尋功能索引庫。
  • NuGet.Commands - 完成命令行和 GUI NuGet 用戶端通用的命令。
  • NuGet.Common - 所有 NuGet 連結庫的通用公用程式和介面。
  • NuGet.Configuration - NuGet 的組態設定實作。
  • NuGet.Credentials - NuGet 客戶端的驗證模型。
  • NuGet.DependencyResolver.Core - NuGet 的 PackageReference 相依性解析程序實作。
  • NuGet.Frameworks - NuGet 對目標架構的瞭解。
  • NuGet.LibraryModel - NuGet 的類型和介面,用於瞭解相依性。
  • NuGet.Localization - NuGet 本地化套件。
  • NuGet.PackageManagement - Visual Studio 安裝流程的 NuGet 套件管理功能。
  • NuGet.Packaging - 提供一組 API 來與數據流中的 .nupkg .nuspec 檔案互動。 NuGet.Protocol 取決於此套件。
  • NuGet.ProjectModel - NuGet 的核心類型和介面,適用於 PackageReference 型還原,例如鎖定檔案、資產檔案和內部還原模型。
  • NuGet.Protocol - 提供一組 API 與 HTTP 和檔案型 NuGet 摘要互動。
  • NuGet.Resolver - NuGet 的 packages.config 型專案的相依性解析程式。
  • NuGet.Versioning - NuGet 的語意版本設定實作。
  • 您可以在 NuGet/NuGet.Client GitHub 存放庫中找到這些套件的 原始程式碼。

    如需 NuGet 伺服器通訊協定的檔,請參閱 NuGet 伺服器 API

    最新版的 NuGet 用戶端 SDK 完全受到支援,而且可以依賴 Bug 修正、更新和增強功能。

    建議使用最新版本的 NuGet 用戶端 SDK 套件,並檢查您的專案是否相依於已取代的 NuGet 用戶端 SDK 套件。

    修補程式版本

    當 Visual Studio 或 .NET SDK 的長期支援 (LTS) 版本需要重大錯誤或安全性修正時,才會獨佔發行 NuGet 用戶端 SDK 的修補版本。

    所有安全性錯誤都應該回報給 MSRC 報告頁面 的 Microsoft 安全性回應中心 (MSRC)。 此外,請參閱 NuGet.Client 存放庫中的安全策略

    我們不保證 API 穩定性,因為小組的責任是工具,而不是連結庫。 如需詳細資訊,請參閱 NuGet.Client 存放庫中 的 NuGet SDK 檔。

    不支援未系結至 Visual Studio 或 .NET LTS 版本的 NuGet 用戶端 SDK 套件將在 nuget.org 上淘汰。

    NuGet 的套件維護方法會與 .NET 套件維護(取代) 指導方針一致。

    NuGet.Protocol

    NuGet.Protocol 安裝套件以與 HTTP 和資料夾型 NuGet 套件摘要互動:

    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 搜尋 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 推送套件:

    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 移除套件:

    NuGet 伺服器可以自由地將套件刪除要求解譯為「硬式刪除」、「虛刪除」或「取消清單」。 例如,nuget.org 將套件刪除要求解譯為「取消清單」。 如需此做法的詳細資訊,請參閱 刪除套件 原則。

    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

    NuGet.Packaging安裝套件以與 資料流中的 .nupkg.nuspec 檔案互動:

    dotnet add package NuGet.Packaging
    

    使用 NuGet.Packaging建立套件、設定元數據,以及新增相依性。

    強烈建議使用官方 NuGet 工具建立 NuGet 套件, 而不 使用此低階 API。 對於格式正確的套件而言,有各種不同的特性很重要,而最新版本的工具有助於納入這些最佳做法。

    如需建立 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}");
    

    您可以在 2016 年發佈的 Dave Glick 部落格系列中找到一些 API 的範例和檔:

  • 探索 NuGet v3 連結庫,第 1 部分:簡介和概念
  • 探索 NuGet v3 連結庫,第 2 部分:搜尋套件
  • 探索 NuGet v3 連結庫,第 3 部分:安裝套件
  • 這些部落格文章是在發行 NuGet 用戶端 SDK 套件的 3.4.3 版本之後不久撰寫的。 較新版本的套件可能與部落格文章中的資訊不相容。

    Martin Björkström 對 Dave Glick 的部落格系列做了後續部落格文章,其中他介紹了使用 NuGet 用戶端 SDK 安裝 NuGet 套件的不同方法:

  • 重新流覽 NuGet v3 連結庫
  •