为什么本机DLL不会复制到输出目录

我有一个C#项目A,它使用.net包装器DLL和本机DLL。 我将.net包装器DLL添加到项目A的引用列表中。由于包装器DLL只在本机DLL处于同一文件夹时才能使用本机DLL,因此应将本机DLL复制到项目A的输出目录中。我实现了这一点通过将本机DLL添加为项目A下的内容文件,并将其复制操作设置为在较新时复制。 这可以。

如果C#项目B直接引用项目A,VS会将项目A使用的所有相关文件复制到项目B的输出目录。这意味着包装器DLL和本机DLL也将被复制到项目B的输出目录中。 这也很好。

然后我还有另一个C#项目C,它只直接引用项目B,而不是项目A.有趣的是,VS不会将本机DLL复制到项目C的输出目录,否则我打算这样做当项目C使用项目B的function并查找本机DLL以使用包装器DLL时,它将找不到它。

有人可以解释为什么VS不将本机DLL复制到项目C的输出目录中吗? 在VS中复制依赖链的文件的机制是什么? 非常感谢。

基本上参考链不会传播,并且由最顶层的程序集(exe,web站点等)来确保它具有所需的一切,无论是本地还是(例如使用托管dll)GAC。 您需要将文件作为“复制到输出”添加到exe / web站点。

为什么不在项目A中添加本机dll作为参考? 这将确保在其他库使用A时始终包含它。

编辑:没关系,这只适用于dll是COM或.NET组件。

由于项目中没有显式依赖项,因此构建器不知道需要使用已知二进制文件输出那些依赖项。 您可以做的是创建一个构建后配置,以便在编译时将这些DLL复制到构建目标。 你可以谷歌如何做到这一点 ,这是第一个解释如何做到这一点的结果之一:

http://visualstudiohacks.com/articles/general/customize-your-project-build-process/