【问题标题】:Add NuGet package without its dependencies添加没有依赖项的 NuGet 包
【发布时间】:2012-04-05 06:40:14
【问题描述】:

我相信我们中的许多人都遇到过这个问题,并且不知何故我在任何地方都遇到了问题。

我有一个跨多个项目的共享库 (Common.Infrastructure.dll),我正在使用 NuGet Server 中内置的 TeamCity 来托管这个库。该库在内部依赖于 NuGet 包,例如 Fluent Nhibernate、Log4net、StructureMap 等)。

很简单,在需要此共享依赖项的项目中执行“Install-Package Common.Infrastructure”还会添加 Fluent NHibernate、log4net、SM 等)作为项目的“引用”。我不会直接使用 Common.Infrastructure 的这些依赖项,但显然最终会在输出(bin/debug)文件夹中需要它们。

有没有办法通过内置的 nuget (nuspec) 支持不引用这些依赖项?

【问题讨论】:

    标签: visual-studio nuget


    【解决方案1】:

    请注意,他的实际问题是关于如何创建一个不添加依赖项的包,而不是如何安装没有依赖项的包。

    使用 Nuspec,您可以显式控制哪些包是依赖项,以及包中的哪些程序集被目标项目引用。但是,我认为没有办法完全按照您对 NuGet 的要求执行操作,因为无法向 Visual Studio 指示程序集应该复制到 bin 目录而不将其添加为项目引用。

    我认为您的问题是将太多功能集中到一个程序集中的症状。我建议您将 Common.Infrastructure.dll 拆分为单独的程序集,以实现功能的各个方面。比如:

    • Common.Infrastructure.Logging.dll - 依赖于 Log4net
    • Common.Infrastructure.Database.dll - 依赖于 Fluent Nhibernate
    • Common.Infrastructure.IoC.dll - 依赖于 StructureMap
    • 其他合适的子程序集
    • Common.Infrastructure.dll - 一个新的更小的功能核心,仅依赖于框架

    当然,您将其分解成的确切程序集将取决于 Common.Infrastructure.dll 中的功能以及您如何使用它。一旦您为这些程序集中的每一个拥有单独的包,您就可以选择在给定项目中引用哪些包,并将其限制为您真正需要的方面和依赖项。

    【讨论】:

      【解决方案2】:

      对此有解决方案。

      编辑您的 nuspec 文件并仅添加您想要的参考 dll。 参考 参考文件="dllwhichyouwantToreference.dll" 参考

      【讨论】:

      • 3 票反对,没有一个解释。我不认为这对我们有帮助。请反对者解释原因吗?
      • 我刚刚花了 6 天时间拆开这个。这个问题,实际上是最初的问题,是 nuget 无法知道这个引用实际上会与安装相同文件的 nuget 包中的 dll 冲突。这样做的问题是,当您在消费应用程序中更新 nuget 包时,它可能会被旧版本覆盖。相信我,会导致头发脱落。然后,开发人员停止维护共享代码,将 sn-ps 复制出来,在不更新依赖项的情况下进行重大更改。导致一个可怜的、毫无戒心的开发者失去了六天的时间。
      【解决方案3】:

      Install-Package 命令有一个标志来忽略依赖关系。示例:

      Install-Package Common.Infrastructure -IgnoreDependencies
      

      【讨论】:

      • 你的答案会起作用,但你真的错过了重点:如何创建一个没有依赖关系的包(如下面的 Jeff 所述)。我确信这个包将被他公司的许多开发人员广泛使用,所以他们都不会记得(甚至不知道)这个特定的包应该使用“-IgnoreDependencies”.key 来安装
      猜你喜欢
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 2019-03-19
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多