添加没有依赖项的NuGet包

jss*_*ngh 34 visual-studio nuget

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

我在许多项目中都有一个共享库(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)支持引用这些依赖项?

Ale*_*ion 68

Install-Package命令有一个标志来忽略依赖项.例:

Install-Package Common.Infrastructure -IgnoreDependencies
Run Code Online (Sandbox Code Playgroud)

  • 你的答案会奏效,但你真的错过了重点:如何创建一个没有依赖关系的包(正如Jeff在下面提到的那样).我确信这个软件包会被他公司的许多开发人员广泛使用,所以他们都不会记得(甚至不知道)应该使用"-IgnoreDependencies"安装这个特定的软件包.key (2认同)

Jef*_*ger 7

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

使用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中的功能以及您如何使用它.为每个程序集创建单独的程序包后,您可以选择在给定项目中引用哪些程序包,并将其限制为您真正需要的方面和依赖项.