为什么本地DLL没有被复制到输出目录?

9
我有一个C#项目A,它使用一个.net包装器DLL和一个本地DLL。我将.NET包装器DLL添加到项目A的引用列表中。由于包装器DLL只在与本地DLL位于同一文件夹时才能正常工作,因此应将本地DLL复制到项目A的输出目录中。我通过将本地DLL添加为项目A下的内容文件并将其复制操作设置为“仅在更新时复制”来实现这一点。这很好。
如果C#项目B直接引用项目A,则VS将复制项目A使用的所有依赖文件到项目B的输出目录中。这意味着包装器DLL和本地DLL也将被复制到项目B的输出目录中。这也很好。
然后我有另一个C#项目C,它仅直接引用项目B,而不是项目A。有趣的是,VS不会将本地DLL复制到项目C的输出目录中,否则当项目C使用项目B的功能并寻找本地DLL以与包装器DLL配合使用时,它将找不到。
有人能解释一下为什么VS不会将本地DLL复制到项目C的输出目录中吗?VS中复制链依赖文件的机制是什么?非常感谢。
3个回答

6

基本上引用链不会传播,而最高级别的程序集(exe、网站等)需要确保它拥有所需的所有内容,无论是本地还是在GAC中(例如使用托管dll)。您需要将文件添加到exe/网站中作为“复制到输出”。


你能更具体地说明如何“将文件添加到exe中(我们在这里谈论的是exe而不是网站),作为输出的副本”吗?非常感谢。 - Steve
1
你只需要在exe项目中重复所需的部署文件,并将它们标记为复制到输出即可。 - Marc Gravell

0

为什么不在A项目中将本地dll作为引用添加呢?这可以确保当其他库使用A时,它始终包含在内。

编辑:不过,如果dll是COM或.NET组件,则此方法才有效。


这是一个很好的想法。至少,这是我认为VS工作的方式。我不会做出解释。 - Eric

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接