繁体   English   中英

引用的DLL未复制

[英]Referenced DLL not copied

我有一个项目(称之为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复制到最终输出目录?

您可以做的最好的事情是将项目ABC都集中在一个Visual Studio 解决方案中 ,然后您可以在不引用dll的情况下引用所需的其他项目。

完成后,再添加一个Project Reference,如下所示:

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM