的NuGet包装和引用的DLL(NuGet Packaging and referencing dl

2019-08-01 07:19发布

背景:我有两个组件称为“A”和“B”。 “” A”引用‘B’,‘A’还引用了一些额外的DLL(Microsoft.Enterprise Library.Data和微软企业Library.Common),我认为应该在nupkg包装。

我相信我的nupkg包装应包含“A”,“B”输出组件和两个“微软企业”组件,这样,当用户安装完我的包,它将给他们一个直接引用大会“A”和其他三个组件将可(但不直接引用,使他们的应用程序将运行。什么是包装不引用的DLL的正确方法是什么?

尝试#1:包装所有需要的DLL在\ net35文件夹按照有关“参考”的NuGet文档 “如果省略此元素,那么通常的行为适用,这是引用的每个组件的lib文件夹”元素

所以,我认为用这个元素将只包含指定为引用组件。 这似乎不是,如果我还使用了“文件”元素的情况下<file src=*.dll" target="lib\net35" />如果我有一个这样的元素,所有副本的DLL来包装它结果在实现这个包引用所有的组件在\ net35目录装配。这不是我想做的事情。我预计,在“引用”指定的唯一装配一些神奇的将是一个实际的被引用和所有其他人则留在爆炸\包文件夹,因为所有的DLL位于同一目录中的应用是可行的。也许我是不正确....

尝试#2添加的内容项目,如果我把未被引用的组件到\内容\ lib中,而不是的lib \ net35当包装这会在项目中的\ lib文件夹,并直接转储\内容\ lib中的dll到该项目,然后强制我们检查他们到源代码控制。 这个工程,编译和运行,因为我想,但我真的不希望这些存储在项目的\ lib文件夹。

我要寻找一个解决方案,该项目得到引用到“A”,仍然可以与运行其他所需的组件位于同一地点,但不直接引用。 这似乎是尝试#1是正确的路径,但也许有一个bug?

仅供参考,我进入了这个与一的NuGet问题直接看到它的那支球队有一个答案为好。

Answer 1:

这是在2.1的NuGet推出了一个bug,后来固定的NuGet版本2.2并于2012年12月发布。

在原发布使用尝试#1现在可以正常工作。



Answer 2:

我不认为你的“尝试1”是要在实践工作。 如果你只能参考“A”。 当你建立你的包,只有“A”将(默认)复制到输出目录。 然后,当您分发应用程序,只有“A”将存在导致错误。

你应该让你的应用程序运行于所有的DLL引用(或想出了另一种解决方案,将自动引用的DLL文件复制到输出目录,但我不知道有没有中直接指定参考多大价值)。 既然你只有几个DLL文件,它可能是最好还是离开了参考部分,以使所有的DLL将自动从lib文件夹引用。



文章来源: NuGet Packaging and referencing dll's