我有一个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中复制依赖链的文件的机制是什么?非常感谢。
答案 0 :(得分:6)
基本上,引用链不会传播,并且由最顶层的程序集(exe,web-site等)来确保它具有所需的一切,无论是本地还是在(例如,使用托管dll) GAC。您需要将文件作为“复制到输出”添加到exe / web站点。
答案 1 :(得分:0)
为什么不在项目A中添加本机dll作为参考?这将确保在其他库使用A时始终包含它。
编辑:没关系,只有在dll是COM或.NET组件时才有效。
答案 2 :(得分:0)
由于项目中没有明确的依赖项,因此构建器不知道需要使用已知二进制文件输出那些依赖项。您可以做的是创建一个构建后配置,以便在编译时将这些DLL复制到构建目标。您可以Google how to do that,这是解释如何执行此操作的第一批结果之一:
http://visualstudiohacks.com/articles/general/customize-your-project-build-process/