C# 为什么不将本机DLL复制到输出目录

C# 为什么不将本机DLL复制到输出目录,c#,visual-studio-2008,dll,C#,Visual Studio 2008,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#项目a,它使用.net包装DLL和本机DLL。我将.net包装器DLL添加到项目A的引用列表中。由于包装器DLL仅在本机DLL位于同一文件夹中时才与本机DLL一起工作,因此应将本机DLL复制到项目A的输出目录。我通过将本机DLL添加为项目A下的内容文件来实现这一点,并将其复制操作设置为“复制”(如果更新)。这很好

如果C#项目B直接引用项目a,VS将把项目a使用的所有依赖文件复制到项目B的输出目录。这意味着包装DLL和本机DLL也将复制到项目B的输出目录。这也很好用

然后我还有另一个C#project C,它只直接引用project B,而不是project A。有趣的是,VS不会将本机DLL复制到project C的输出目录,这是我打算做的,否则,当project C使用project B的功能并寻找本机DLL与包装器DLL一起工作时,它找不到它


有人能解释为什么VS不复制本机DLL吗 到项目C的输出目录?VS中复制链相关文件的机制是什么?非常感谢。

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

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


编辑:无需担心,这仅在dll是COM或.NET组件时有效。

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


您能否更具体地说明如何“将文件作为复制输出添加到exe(我们这里指的是exe而不是网站)”中?非常感谢。您只需要在exe的项目中重复所需的部署文件,并将它们标记为复制到输出。这是一个很好的主意。至少,我假设VS是这样工作的。我不知道