首页 文章

添加没有依赖项的NuGet包

提问于
浏览
33

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

我在许多项目中都有一个共享库(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 回答

  • 67

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

    Install-Package Common.Infrastructure -IgnoreDependencies
    
  • -3

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

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

  • 7

    有解决方案 .

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

相关问题