引用的DLL未复制

时间:2013-11-01 17:20:41

标签: c# visual-studio

我有一个项目(称之为A,它是一个exe)引用了另一个项目(称之为B,它是一个类库),它引用了一个dll(称之为C)。从visual studio调试A.exe时出现运行时错误:

B.dll中发生了'System.IO.FileNotFoundException'类型的未处理异常。附加信息:无法加载文件或程序集“C”,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。

当我进入我执行的bin \ debug目录时,果然,C.dll不在那里。

我已经明确地从B.dll调用C.dll中的类,因此没有任何奇怪的运行时添加引用或反射用于调用它。我还在C.dll上将“Copy Local”设置为true。如果我直接从A.exe引用C.dll,那么它运行没有问题,但我宁愿不必这样做。

我试图在一个新的解决方案中重现问题,但我一直无法做到。

有谁知道什么可能阻止这个dll复制到最终输出目录?

3 个答案:

答案 0 :(得分:1)

您可以做的最好的事情是将项目ABC全部放在一个Visual Studio 解决方案中,然后您可以参考您需要的其他项目,无需引用dll。

完成后,再添加一个项目参考:

  • 项目B引用项目C
  • 项目A参考项目B

因为您正在引用项目,所以当您编译整个项目时,它将为骑行提供必要的dll。

然而,正如neo所说,如果你将C作为dll,那么A也必须引用它,因为VS也不够聪明,也不能复制它。

答案 1 :(得分:1)

好吧终于明白了......我想。

看起来C项目在Application - > Assembly Information下没有任何版本信息。它也缺少一个guid。

对于记录:您可以参考我描述的方式(参考C引用C)并复制输出。我确实回到了dll引用而不是项目引用,它在干净和构建之后仍然有用。

我仍然不确定为什么我能够在新的解决方案中(在进行更改之前)使用它,但我现在正在运行。

修改 另外一点,看起来项目中没有assembly.cs(这就是为什么它没有任何版本信息)。我想知道是否只是重新编译这个项目可以修复它而不是更新程序集信息。

答案 2 :(得分:1)

我遇到过类似的问题所以我建议尝试这些:

  • 将“copy local”切换为“false”,然后再次切换为“true”,如果问题丢失,则应该解决问题     项目文件中的 < Private > True < /Private >节点
  • 检查项目的目标框架,我在针对“4.0框架”和其他“4.0客户端配置文件”的几个项目中遇到类似问题,在每个项目切换到“4.0”后解决了