2012-10-10 55 views
5

背景:我有两个名为“A”和“B”的程序集。 “”A“引用”B“。”A“也引用一些额外的dll(Microsoft.Enterprise Library.Data和Microsoft Enterprise Library.Common),我认为它应该打包在nupkg中。NuGet包装和引用DLL的

我相信我的nupkg包应该包含来自“A”,“B”和两个“Microsoft Enterprise”程序集的程序集输出,这样当有人安装我的程序包时,它将直接引用程序集“A”,其他三个程序集将可用但不能直接引用,从而使他们的应用程序将运行什么是包装不引用的DLL的正确方法

尝试#1:?包装所有需要的DLL在\ net35文件夹 按照NuGet documentation regarding the "references"元素“如果省略了该元素,那么通常的行为将适用,即引用lib文件夹中的每个程序集。”

因此,我假设通过使用此元素它将只包含指定为引用的程序集。如果我也使用“文件”元素<file src=*.dll" target="lib\net35" />,这似乎不是这种情况。如果我有一个像这样的元素将所有dll复制到包中,它会导致实现此包的程序集引用\ net35目录中的所有程序集。这不是我想要做的。我期望一些魔法,只有在“引用”中指定的程序集才会被实际引用,其他所有程序都将保留在展开的\ packages文件夹中,并且该应用程序可以工作,因为所有的dll都位于相同的目录中。也许我是不正确....

尝试#2添加的内容时,该包装在创建\ lib文件夹项目 如果我把未被引用的组件到\内容\ lib中,而不是LIB \ net35项目并直接将\ content \ lib dll转储到该项目中,然后强制我们将它们检入到源代码控制中。这工作,编译和运行,但我真的不希望这些存储在项目的\ lib文件夹中。

我正在寻找一个解决方案,其中项目获得对“A”的引用,并且仍然可以与其他所需的程序集共同运行但不直接引用。似乎尝试#1是正确的道路,但也许有一个错误?

仅供参考,我直接进入这个as a issue with NuGet看到它的团队也有一个答案。

回答

3

这是的NuGet 2.1引入了一个错误,后来固定在其发布于2012年12月

在原发布使用尝试#1现在正常的NuGet版本2.2。

0

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

您应该引用所有DLL以使您的应用程序运行(或想出另一个解决方案,它会自动将引用的DLL复制到输出目录,但我不确定在指定引用时是否有很多值直)。由于您只有几个DLL,因此最好省略参考部分,以便所有DLL都从lib文件夹中自动引用。

+0

这是NuGet 2.1中引入的一个回归/错误,他们已经纠正了这个问题,它将在本月的2.2版中得到修复。 – Jay