7

背景: 我有两个名为“A”和“B”的程序集。“A”引用“B”。“A”还引用了一些我认为应该打包在 nupkg 中的附加 dll(Microsoft.Enterprise Library.Data 和 Microsoft Enterprise Library.Common)。

我相信我的 nupkg 包应该包含来自“A”、“B”和两个“Microsoft Enterprise”程序集的程序集输出,这样当有人安装我的包时,它会给他们直接引用程序集“A”和其他三个程序集将可用(但不直接引用,以便他们的应用程序可以运行。打包非引用 dll 的正确方法是什么?

尝试 #1:将所有必需的 dll 打包在 \net35 文件夹中 根据有关“references”元素的 NuGet 文档,“如果省略此元素,则应用通常的行为,即引用 lib 文件夹中的每个程序集。”

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

尝试 #2 添加为项目 的内容我们将它们检查到源代码控制中。这可以按我的意愿工作、编译和运行,但是,我真的不希望这些存储在项目的 \lib 文件夹中。

我正在寻找一个解决方案,其中项目获得对“A”的引用,并且仍然可以与位于同一位置但不直接引用的其他所需程序集一起运行。看起来尝试 #1 是正确的路径,但可能存在错误?

仅供参考,我直接将其作为 NuGet 的问题输入,以查看团队也有答案。

4

2 回答 2

4

这是 Nuget 2.1 中引入的一个错误,后来在 2012 年 12 月发布的 Nuget 版本 2.2 中得到了修复。

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

于 2012-12-26T19:46:05.317 回答
0

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

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

于 2012-11-19T07:17:12.417 回答