C# NuGet:在项目中将包依赖项显式列为包引用,以便可以卸载它们

C# NuGet:在项目中将包依赖项显式列为包引用,以便可以卸载它们,c#,.net-core,nuget,nuget-package,nuspec,C#,.net Core,Nuget,Nuget Package,Nuspec,我正在创建一个NuGet包(我们称之为Lib),它在一个单独的包中也有分析器(Lib.analyzers) 默认情况下,我希望在安装Lib时将Lib.Analyzers安装到项目中。我可以通过在Lib的依赖项中(在.nuspec文件中)列出Lib.Analyzers来实现这一点 但我也希望用户能够在不需要时再次卸载Lib.Analyzers AFAIK包依赖项未在包管理器中作为单个包列出,并且以下内容在包管理器控制台中不起作用: PM> Install-Package Lib ... PM

我正在创建一个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'
有没有办法做到这一点?我在房间里什么也找不到

根本原因 我想尽量减少新用户的摩擦,即他们应该获得
Lib.Analyzers
提供的帮助,而不必记得每次安装
Lib
时都要安装分析器

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

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

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


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

关于可选依赖项的GitHub问题已经解决

因此,不幸的是,它目前不受支持,将来似乎也不受支持

给出了以下密切的理由:

有两个原因-我们正在关闭多年未激活的bug 一年多,两年多,这不符合我们的计划 在不久的将来

如果您有此功能的strong案例,则可以打开新问题 我们会考虑的。

也许你的问题是一个“强有力的案例”

话虽如此,您的解决方案似乎相当不错。更多的是文档/介绍问题


如果这是你问题的根源的话,还有一个问题


啊,太糟糕了。感谢您找到相关问题。