针对项目查找和评估 NuGet 包

启动 .NET 项目或确定应用或服务中的功能需求时,通常可以安装现有的 NuGet 包,以节省时间并避免创建自己包的麻烦。 现有包可能来自 nuget.org 公共集合,也可能来自组织或其他第三方提供的私有源。

查找包

可以直接在 https://nuget.org/packages找到包,或从 Visual Studio 程序包管理器 UI 或以 nuget.org 作为源的程序包管理器控制台中找到包。 nuget.org 中的所有包都会定期进行病毒扫描。

nuget.org/packages 中,可看到一个 NuGet 包列表,所有 .NET 项目中最常用的包都列在最前面。 其中一些包可能对项目有用。

Screenshot that shows the default view of nuget.org/packages with the most popular packages at the top.

若要搜索包,请在页面顶部的“搜索”框中输入包名称或搜索词。 可以使用高级搜索语法筛选搜索。

高级筛选和排序

在 nuget.org/packages 中,可以使用高级筛选和排序选项来优化搜索结果。

Screenshot that shows the filtering and sorting options on nuget.org.

使用框架筛选器显示面向特定 .NET 框架的包(若要了解详细信息,请参阅目标框架):

  • 选择其中一个 .NET Framework 生成检查框将筛选搜索结果,以与该代中的任何单个目标框架兼容。 例如,选择 .NET 将返回与任何新式 .NET 框架兼容的包,包括 net5.0 通过 net8.0

    Screenshot that shows the Framework filters on nuget.org.

  • 使用右侧的箭头展开其中一个框架代系,将显示可以筛选结果的单个目标框架名字对象 (TTFM)。 例如,选择 net5.0 将返回与“.NET 5.0”框架兼容的包。

  • 默认情况下,包按其扩展的计算兼容框架列表进行筛选。 如果要仅按它们显式面向的资产框架筛选包,请取消选中“包含兼容的框架”检查框。

  • 组合多个框架筛选器将显示与所有所选筛选器匹配的搜索结果,即属于所选内容交集的包。 例如,选择 netcoreapp3.1net45 将显示同时面向“.NET Core 3.1”和“.NET Framework 4.5”的包。 选择 .NET Core 框架生成复选框和 net45 复选框将返回面向“.NET Framework 4.5”的包,以及至少一个“.NET Core”TFM(netcoreapp1.0netcoreapp3.1)。

    • 或者,如果想要查看与任何框架筛选器匹配的包,请选择框架筛选器模式选项上的“任何”单选按钮。 现在,选择netcoreapp3.1net5.0显示面向“.NET Core 3.1”或“.NET 5.0”的包。 netcoreapp3.1 选择检查框和.NET框架生成检查框将返回面向“.NET Core 3.1”或任意一个“的包。NET 的TFM(net5.0通过net8.0)。
  • 可以在此处详细了解如何评估包支持的框架及其与项目的兼容性。

使用“包类型”筛选器显示特定类型的包:

  • 所有类型都是默认类型,无论类型如何,都显示所有包。
  • 依赖项筛选器到可以安装到项目中的常规 NuGet 包。
  • .NET 工具筛选到包含控制台应用程序的 .NET 工具包。
  • 模板筛选到 .NET 模板,这些模板可用于使用 dotnet new 命令创建新项目。

默认情况下,NuGet 会列出所有版本的包,包括预发行版和 beta 版本。 在“选项”部分中,取消选择“包括预发行版”复选框,可仅列出稳定且已发布的包版本。

如要应用更改,请选择“应用” 若要返回到默认值,请选择“重置”。

使用页面右上角的“排序依据”下拉列表按多个条件对列表进行排序:

  • 相关性是默认设置,并根据内部评分算法对结果进行排序。
  • 下载按下载总次数以降序对搜索结果进行排序。
  • 最近更新按最新包版本的创建日期以时间降序对搜索结果进行排序。

搜索语法

nuget.org、NuGet CLI 和 Visual Studio 中的包搜索查询都使用相同的语法。 其他包源(如 Azure 项目或 GitHub 包存储库)可能使用不同的语法,或者可能不支持高级筛选。

  • 可以使用语法 <property>:<term> 搜索包 idpackageidversiontitletagsauthordescriptionsummaryowner 属性。

  • 搜索适用于关键字和说明,且不区分大小写。 例如,以下字符串将搜索 nuget.core 字符串的 id 属性:

    id:NuGet.Core
    ID:nuget.core
    Id:NUGET.CORE

  • id 属性搜索匹配子字符串,而按 packageidowner 搜索将得到不区分大小写的确切匹配。 例如:

    PackageId:jquery 搜索确切的包 ID jquery
    Id:jquery 搜索包含字符串 jquery 的所有包 ID。

  • 可以同时搜索多个值或属性。 例如:

    id:jquery id:uiid 属性中搜索多个术语。
    id:jquery tags:validation 搜索多个属性。

  • 搜索将忽略不受支持的属性,因此 invalid:jquery ui 与搜索 ui 相同,而且 invalid:jquery 返回所有包。

确定支持的框架

仅当包支持的框架中包含该项目的目标框架时,NuGet 才会在项目中安装包。 如果包不兼容,NuGet 将发出错误。

有多种方法可以确定包支持的框架:

  • 在搜索页上,包支持的框架将显示为包 ID 下方的锁屏提醒。 这些锁屏提醒显示 .NET、.NET Core、.NET Standard.NET Framework 代系中支持的最低框架版本 该包将与任何等于或高于所显示的锁屏提醒版本的框架版本兼容。

    “深蓝色”徽章表示显式目标框架,而“浅蓝色”徽章表示计算兼容的框架。

    单击锁屏提醒会将你重定向到 nuget.org 上的程序包详细信息页面。包 页面上的“框架 ”选项卡将显示受支持框架的完整列表。

    Screenshot of the Framework badges on nuget.org's search page.

  • 在包的 nuget.org 页上,支持的框架显示在包 ID 和“框架”选项卡上,但并非所有包都显示受支持的框架。

    Screenshot of the Frameworks UI and tab on the package page at nuget.org.

  • 通过选择“关于”下的“下载包”手动下载包。 将下载的包的文件扩展名从 .nupkg 更改为 .zip,打开 .zip 文件夹,并检查其 lib 文件夹。 每个受支持的框架都有子文件夹,每个子文件夹都以目标框架名字对象 (TFM) 命名。 有关详细信息,请参阅目标框架。 如果 lib 下没有任何子文件夹,并且只有一个 DLL,请尝试安装包来发现其兼容性。

  • 尝试使用 Visual Studio 包管理器控制台中的 Install-Package 将包安装到项目中。 如果包不兼容,此控制台输出将显示包支持的框架。

预发行包

许多包创建者会提供预览版和 beta 版,他们会继续改进并收集其最新版本的反馈。 默认情况下,nuget.org 在其包列表和搜索结果中显示预发行包。

若要仅列出和搜索稳定版本,请:

  • 在 nuget.org,在高级搜索面板中取消选择“包括预发行版”复选框。
  • 在 Visual Studio NuGet 包管理器 UI 中,取消选择搜索框旁边的“包括预发行版”复选框。

默认情况下,Visual Studio 包管理器控制台、NuGet CLI 和 dotnet CLI 工具不包含预发行版版本。 若要包括预发行版本:

  • 在包管理器控制台中,将 -IncludePrerelease 开关与 Find-PackageGet-PackageInstall-PackageSync-PackageUpdate-Package 命令配合使用。 有关详细信息,请参阅 PowerShell 参考文档

  • 对于 NuGet CLI,请将 -prerelease 开关与 installupdatedeletemirror 命令配合使用。 有关详细信息,请查看 NuGet CLI 参考文档

  • 对于 dotnet CLI,请使用 -v 参数指定预发行版。 有关详细信息,请参阅 dotnet 添加包参考

本机 C++ 包

Visual Studio C++ 项目可以使用本机 C++ NuGet 包。 安装这些包可启用“管理 NuGet 包”上下文菜单命令,公开 native 目标框架,并提供 MSBuild 集成。

若要在 nuget.org/包中查找本机包,请使用 tag:native 搜索。 此类包通常提供 .targets.props 文件,NuGet 可在添加包时自动导入这些文件。

评估包

评估包有用性的最佳方式是尝试使用它。使用包时,需要依赖包,因此必须确保它强大且可靠。 但是,安装包并直接测试包非常耗时。 可以通过使用包页面上的信息在 nuget.org/packages 中了解包的质量。

  • 包列表和包页面上包 ID 旁边的保留前缀复选框,表示包所有者已申请并被授予保留的包 ID 前缀。 若要满足 ID 前缀保留条件,包所有者必须明确标识自己及其包。

    Screenshot that shows Prefix Reserved on a package's page.

  • 包页面右侧列中的“下载”显示“总计”、“当前版本”和“每日平均下载”。 大量的数字表明,该包已在许多开发人员中得到证明。

    Screenshot that shows Download statistics on a package's page.

    选择“下载”旁边的“完整统计信息”,查看按版本号显示过去六周的包下载的页面。 开发人员使用的版本通常是更好的选择。

  • 在包页面上,“使用者”选项卡显示前五种最受欢迎的 nuget.org 包以及依赖此包的 GitHub 存储库。 依赖于此包的包和存储库称为依赖项。 依赖包和存储库可以被视为认可此包,因为它们选择信任并依赖它。

    Screenshot that shows the Used By list.

    依赖包的最新稳定版必须依赖于此包的任意版本。 此定义可确保列出的依赖包是包作者信任和依赖此包的决策的最新反映。 依赖项列表不会显示预发行依赖项,因为它们尚未被视为完全认可的依赖项。 以下示例显示哪些包显示为依赖项:

    依赖包版本 将依赖包列为依赖项?
    v1.0.0
    v1.1.0(最新稳定版)取决于此包
    v1.2.0-预览版
    是,最新稳定版依赖于此包
    v1.0.0 依赖于此包
    v1.1.0(最新稳定版)
    v1.2.0-预览版
    否,最新稳定版本并不依赖此包
    v1.0.0 依赖于此包
    v1.1.0(最新稳定版)
    v1.2.0-preview 取决于此包
    否,最新稳定版本并不依赖此包

    GitHub 存储库的星标数表示该存储库在 GitHub 用户中的受欢迎程度。 有关 GitHub 星标和存储库排名系统的详细信息,请参阅“关于星标”。

    注意

    使用者”部分是定期自动生成的,无需人工评审,并且仅用于信息性目的。

  • 包页面上的“版本”选项卡显示包版本的版本下载上次更新时间和严重漏洞。 安装的版本不应有任何高严重性漏洞。 维护良好的包应具有最新更新和长版本历史记录。 忽略的包很少更新,更新时间也很久远。

    Screenshot that shows the Versions list.

包页面的右列具有其他信息链接:

Screenshot that shows the right column of the package page.

  • 如果可以,请选择“项目网站”,查看作者提供的支持选项。 具有专门网站的项目通常都会得到很好的支持。

  • 选择“源存储库”,转到包的 Git 源代码存储库。 许多作者在开源存储库中维护自己的包,以便用户可以直接提供 bug 修复和功能改进。 包的贡献历史记录也能反映出积极参与的开发人员的数量。

  • 选择“<许可证类型>”许可证,查看程序包的 MIT 或其他许可证。 如果包未指定许可条款,请联系包所有者。

  • 选择“所有者”下的任何包所有者,查看他们已发布的其他包。 具有多个包的所有者更有可能继续对其工作成果提供支持。 选择“所有者”旁边的“联系所有者”,可直接联系包开发人员。

检索许可证信息

某些 NuGet 客户端和 NuGet 源可能无法呈现许可信息。 为了在此类情况下维护向后兼容性,许可证 URL 会指向介绍如何检索许可证信息的文档。

如果通过选择包的许可证 URL 转到此页面,表示包中有许可证文件,并且:

  • 你已连接到尚不知道如何向客户端解释和显示许可证信息的源,或者
  • 您使用的客户端不知道如何解释和读取源提供的许可证信息,或者
  • 这两种方案的组合。

要读取软件包内许可证文件中的信息,请执行以下操作:

  1. 手动下载包,并将它的内容解压缩到文件夹中。
  2. 打开文件夹根目录处的 .nuspec 文件。
  3. 检查 <license> 标记,例如 <license type="file">license\license.txt</license>。 示例标记指出许可证文件名为 license.txt,并且位于名为“许可证”的子文件夹中。
  4. 导航到指定位置并打开指定的文件。

对于相当于在 .nuspec 中设置许可证的 MSBuild 相关信息,请查看打包许可证表达式或许可证文件

后续步骤