NuGet:明确列出包依赖项作为项目中的包引用,以便可以卸载它们

NuGet: explicitly list package dependencies as package references in project so they can be uninstalled

我正在创建一个 NuGet 包(我们称它为 Lib),它在一个单独的包 (Lib.Analyzers) 中也有分析器。

默认情况下,我希望在安装 Lib 时将 Lib.Analyzers 安装到项目中。我可以通过在 Lib(在 .nuspec 文件中)的依赖项中列出 Lib.Analyzers 来实现此目的。

但我也希望用户能够在不需要时再次卸载Lib.Analyzers

AFAIK 包依赖项未在包管理器中列为单独的包,以下内容在包管理器控制台中不起作用:

PM> Install-Package Lib
...
PM> Uninstall-Package Lib.Analyzers
Uninstall-Package : Package 'Lib.Analyzers' to be uninstalled could not be found in project 'ClassLibrary1'

有办法实现吗?我在 docs.

中找不到任何内容

理由

我想尽量减少新用户的摩擦,即他们应该获得 Lib.Analyzers 提供的帮助,而不必在每次安装 Lib.

时记住安装分析器

但我也希望 Lib.Analyzers 不会被强加给可能不再需要它们的有经验的用户。

解决方法

我目前的解决方法是将 Lib 重命名为 Lib.Core,移除其对 Lib.Analyzers 的依赖并创建名为 Lib 的第三个元包,将两者捆绑在一起,得出以下依赖关系图:

Lib
|- Lib.Core
'- Lib.Analyzers

新用户将始终安装 Lib,而有经验的用户只能安装 Lib.Core

然而,Lib 实际上是一个相当小的库,所以这个解决方案感觉有点“过度设计”。

存在一个关于可选依赖项 here 的 GitHub 问题,该问题已关闭。

所以很遗憾,目前不支持它,将来似乎也不支持。

rohit21agrawal 给出了以下关闭原因:

Couple of reasons - we are closing bugs that have not been active for over a year, and two, this doesn’t fit in with the plans we have for NuGet in the near future.

You can open a new issue if you have a strong case for this feature and we would consider it.

也许您的问题是“强有力的案例”

话虽如此,您的解决方法似乎还不错。更多 documentation/introduction 问题。


还有一个 option to suppress specific analyzers,如果这是您问题的根源。