添加没有依赖项的NuGet包

时间:2012-03-20 18:36:08

标签: 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)支持引用这些依赖项?

3 个答案:

答案 0 :(得分:67)

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

Install-Package Common.Infrastructure -IgnoreDependencies

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

答案 2 :(得分:-3)

有解决方案。

编辑您的nuspec文件并仅添加您想要的参考dll。 引用 reference file =“dllwhichyouwantToreference.dll”引用

相关问题