背景:我有两个名为“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文件夹中 根据{{3}}元素“如果省略此元素,则应用通常的行为,即引用lib文件夹中的每个程序集。”
因此,我假设通过使用此元素,它将仅包含指定为引用的程序集。如果我还使用“文件”元素<file src=*.dll" target="lib\net35" />
,情况似乎并非如此。如果我有一个这样的元素将所有dll复制到包中,它会导致实现此包的程序集引用\ net35目录中的所有程序集。这不是我想要做的。我期待一些魔法,只有“引用”中指定的程序集才会被实际引用,而其他所有程序集将保留在爆炸的\ packages文件夹中,并且应用程序将起作用,因为所有dll都位于同一目录中。也许我错了......
尝试#2将内容添加到项目 如果在打包时将未引用的程序集放入\ content \ lib而不是lib \ net35,则会在项目中创建一个\ lib文件夹,并直接将\ content \ lib dll转储到该项目中,然后强制我们将它们检入源代码管理中。这可以工作,编译和运行,但我真的不希望这些存储在项目的\ lib文件夹中。
我正在寻找一个解决方案,其中项目获取对“A”的引用,并且仍然可以与其他所需的程序集共同运行但不直接引用。似乎尝试#1是正确的路径,但可能有一个错误?
仅供参考,我直接输入此NuGet documentation regarding the "references"以确定该团队也有答案。
答案 0 :(得分:4)
这是Nuget 2.1中引入的一个错误,后来在2012年12月发布的Nuget版本2.2中修复。
在原始发布中使用尝试#1现在可以正常工作。
答案 1 :(得分:0)
我认为你的“尝试1”不会在实践中发挥作用。如果您只引用“A”。构建程序包时,只会将“A”复制(默认情况下)到输出目录。然后,当您分发应用程序时,只会出现“A”导致错误。
您应该引用所有DLL来运行您的应用程序(或者提出另一种解决方案,它会自动将引用的DLL复制到输出目录,但我不确定直接指定引用有多大价值)。由于您只有几个DLL,因此最好省略引用部分,以便从lib文件夹中自动引用所有DLL。