问题描述
我正在创建一个 NuGet 包(我们称之为 Lib
),它在单独的包 (Lib.Analyzers
) 中还包含分析器。
默认情况下,我希望在安装 Lib.Analyzers
时将 Lib
安装到项目中。我可以通过在 Lib.Analyzers
的依赖项(在 Lib
文件中)中列出 .nuspec
来实现这一点。
但我也希望用户能够在不需要时卸载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'
基本原理
我想尽量减少新用户的摩擦,即他们应该获得 Lib.Analyzers
提供的帮助,而不必每次安装 Lib
时都要记住安装分析器。
但我也希望 Lib.Analyzers
不会被强迫到可能不再需要它们的有经验的用户身上。
解决方法
我目前的解决方法是将 Lib
重命名为 Lib.Core
,将其依赖项删除为 Lib.Analyzers
并创建一个名为 Lib
的第三个元包,将两者捆绑在一起,到达在以下依赖关系图中:
Lib
|- Lib.Core
'- Lib.Analyzers
新用户将始终安装 Lib
,而经验丰富的用户只能安装 Lib.Core
。
然而,Lib
实际上是一个相当小的库,所以这个解决方案感觉有点“过度设计”。
解决方法
有一个关于可选依赖项 here 的 GitHub 问题,已关闭。
很遗憾,目前不支持,而且将来似乎也不支持。
rohit21agrawal 给出了以下接近的理由:
几个原因 - 我们正在关闭尚未激活的错误 一年多,两年多,这不符合我们的计划 NuGet 在不久的将来。
如果您有此功能的强案例,您可以打开一个新问题 我们会考虑的。
也许您的问题是“强案”。
话虽如此,您的解决方法似乎还不错。更多的是文档/介绍问题。
还有一个 option to suppress specific analyzers,如果这是您问题的根源。