弃用软件包

如果您不再维护包,或者希望鼓励使用者迁移到其他包,可以将包标记为弃用。

包弃用不同于取消显示您的包,如下所示:

  • 取消列出 包会阻止其发现,因为它隐藏在搜索结果中。
  • 弃用 一个包可使其当前使用者了解是否在项目中安装或使用了该包。 它还让他们知道弃用的原因,以及你指定的备用推荐包(包发布者)。 弃用某个包并不会将其从列表中取消显示。

作为发布者,可以选择取消列出和弃用包。

弃用流程

  1. 若要弃用包,请转到 “管理包 ”并选择“ 弃用” :

    转到“弃用包”选项

  2. 选择要弃用的版本。 如果要弃用所有版本,请选择 “选择所有版本 ”选项。

    选择要弃用的包版本

  3. 选择弃用的原因。 如果包已不再维护,请选择 “遗留” 选项。 如果特定版本存在关键 bug,请选择 “具有关键 bug” 选项。 出于任何其他原因,请选择 “其他”。 您始终可以为软件包(及其版本)指定备用推荐选项,并向所有者提供自定义消息。

    选择备用包建议和自定义消息的原因

注释

自定义消息仅在 nuget.org 上显示,但不显示在客户端上。 目前,诸如 dotnet.exe 和 NuGet 包管理器之类的客户端不会显示自定义消息。

已弃用包的客户端体验

一旦一个软件包被弃用,其用户会通过以下方式接到通知(具体取决于所使用的客户端)。

Visual Studio

从 Visual Studio 2019 版本 16.3 开始可用

Visual Studio 会在Installed 选项卡上警告有关已弃用包的使用。它将显示关于包及其弃用信息的警告(包括弃用原因以及替代包的信息(如果存在))。

Visual Studio 上安装的包管理器选项卡上已弃用的包

dotnet.exe

从 .NET SDK 3.0 开始可用

如果使用 dotnet.exe,则可以在解决方案或项目文件夹上运行命令 dotnet list package --deprecated ,以获取已弃用的包列表以及弃用信息:

> dotnet list package --deprecated

The following sources were used:
   https://api.nuget.org/v3/index.json

Project `My.Test.Project` has the following deprecated packages
   [netcoreapp3.0]:
   Top-level Package      Resolved   Reason(s)   Alternative
   > My.Sample.Lib        6.0.0      Legacy      My.Awesome.Package

将受欢迎程度传递到较新的软件包

弃用旧包的包作者可以选择将其“受欢迎程度”转移到较新的包,以提升较新的包的搜索排名。 这有助于客户发现较新的包,而不是弃用的包。

例如,假设我有两个包:

  • 我的弃用旧包, Contoso.Legacy 下载量为 300 万
  • 我的最新包Contoso.Latest已经被下载了 5 次。

NuGet.org 更倾向于具有较高下载/普及性的搜索结果。 鉴于搜索查询“Contoso”,我已废弃的包 Contoso.Legacy 在搜索结果中可能会排在我的最新包 Contoso.Latest 之上。

若要解决此问题,我可以申请将已弃用的遗留包的受欢迎程度转移到我的最新包。 这会导致 Contoso.Latest 搜索结果排名较高,而 Contoso.Legacy 排名较低。 只有包的内部受欢迎程度分数受到影响,每个包的实际下载计数不会受到影响。

注释

人气转移可能会让消费者更难找到旧版本软件包。

请参阅下表,了解人气转移如何影响查询“Contoso”的搜索结果排名:

搜索排名 在流行度转换之前 流行度转移后
1 Contoso.Legacy,300万次下载 Contoso.Latest,5 次下载
2 Contoso.Scanner,2M 下载 Contoso.Scanner,2M 下载
3 Contoso.Core,1.5M 下载 Contoso.Core,1.5M 下载
4 Contoso.UI,1M 下载 Contoso.UI,1M 下载
... ... ...
20 Contoso.Latest,5 次下载 Contoso.Legacy,300万次下载

人气转移应用流程

  1. 查看 流行度转移要求
  2. 发送电子邮件 account@nuget.org,其中包含需要将其受欢迎程度转移的已弃用包,以及需要接收受欢迎程度转移的稳定包列表。

提交申请后,我们会通知您申请被接受或拒绝(以及导致拒绝的原因)。 我们可能需要提出其他标识问题来确认所有者身份。

受欢迎度转移要求

  • 旧包和新包之间必须具有共同的所有者。
  • 新的程序包在命名和功能上必须与旧版程序包明确相关,即演变或是下一代。
  • 必须弃用旧包的所有版本,并指向接收传输的新包。
  • 普及传输不得给 NuGet 用户造成混淆或加剧 NuGet 搜索体验。
  • 新包必须具有稳定的版本。
  • 旧包不得从另一个已弃用的包接收受欢迎度传输。

高级人气转移方案

包合并

我可以将多个已弃用包的受欢迎度转移给一个新包。 例如,假设我有 3 个包:

  • 我的第一个弃用的遗留软件包,Contoso.Legacy1
  • 我的第二个已弃用遗留程序包,Contoso.Legacy2
  • 我的新合并包, Contoso.Latest

停用Contoso.Legacy1Contoso.Legacy2后,我可以申请将他们的受欢迎程度转移到Contoso.Latest

包分割

弃用包的受欢迎程度可以被转移并分配到最多 5 个较新的包中。 如果已弃用的包的功能已拆分到多个新包中,这非常有用。 例如,假设我有 3 个包:

  • 我弃用的旧包, Contoso.Legacy
  • 我的第一个新包, Contoso.Web
  • 我的第二个新包, Contoso.Cloud

Contoso.Legacy 包括 Web 和云功能,但我决定将该功能拆分为下一代的不同包。 我弃用Contoso.Legacy后,可以申请将其受欢迎程度转移给Contoso.WebContoso.Cloud

警告

传输的受欢迎程度将在所有新包之间均匀拆分。 因此,我们建议将已弃用的包的受欢迎程度转为尽可能少的包。

人气传递链

已弃用的包无法转移其受欢迎度, 如果它已经从另一个已弃用的包接收受欢迎度。 例如,假设我有 3 个包:

  • 我弃用的旧包, Contoso.First
  • 我弃用的旧包, Contoso.Second
  • 我的新包, Contoso.Latest

如果 Contoso.First 将它的受欢迎程度转移到 Contoso.Second,,那么 Contoso.Second 就不能将它的受欢迎程度转移到 Contoso.Latest。 相反,我们建议根据包合并方案将Contoso.FirstContoso.Second的受欢迎程度转移到Contoso.Latest