我相信我们中的许多人都遇到过这个问题,不知怎的,我在任何地方都遇到了问题 .
我在许多项目中都有一个共享库(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 回答
Install-Package命令有一个标志来忽略依赖项 . 例:
请注意,他的实际问题是如何创建一个不添加依赖项的包,而不是如何安装没有依赖项的包 .
使用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中的功能以及您如何使用它 . 为每个程序集创建单独的程序包后,您可以选择在给定项目中引用哪些程序包,并将其限制为您真正需要的方面和依赖项 .
有解决方案 .
编辑您的nuspec文件并添加您想要的引用dll . 引用reference file =“dllwhichyouwantToreference.dll”引用