【问题标题】:NuGet: explicitly list package dependencies as package references in project so they can be uninstalledNuGet:将包依赖项显式列出为项目中的包引用,以便可以卸载它们
【发布时间】:2021-04-20 12:28:25
【问题描述】:

我正在创建一个 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 实际上是一个相当小的库,所以这个解决方案感觉有点“过度设计”。

【问题讨论】:

    标签: c# .net-core nuget nuget-package nuspec


    【解决方案1】:

    有一个关于可选依赖here的GitHub问题,已关闭。

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

    rohit21agrawal 给出了以下关闭原因:

    几个原因 - 我们正在关闭尚未激活的错误 一年多两年,这不符合我们的计​​划 NuGet 在不久的将来。

    如果您对此功能有强有力的案例,您可以打开一个新问题 我们会考虑的。

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

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


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

    【讨论】:

    • 啊,太糟糕了。感谢您找到相关问题。
    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 2011-02-21
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多