【问题标题】:Referenced DLL not copied引用的 DLL 未复制
【发布时间】:2013-11-01 17:20:40
【问题描述】:

我有一个项目(称为 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 上将“复制本地”设置为 true。如果我直接从 A.exe 引用 C.dll,那么它运行没有问题,但我宁愿不必这样做。

我尝试在新的解决方案中重现该问题,但我无法做到。

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

【问题讨论】:

  • 您如何从B 引用C?项目参考?
  • @christiandev C 是对 dll 的引用
  • @christiandev C 不是解决方案的一部分,因此它不是项目参考。
  • @terrybozzio C 被 B 通过浏览 dll 引用。
  • 所以,C实际上是一个DLL,而不是一个类库项目。 Project A 需要引用 C

标签: c# visual-studio


【解决方案1】:

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

一旦你有了它,然后像这样添加一个项目参考:

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

因为您随后引用了 项目,所以当您编译整个项目时,它将拉动必要的 dll。

但是,正如 neo 所说,如果您将 C 保留为 dll,那么 A 也必须引用它,因为 VS 还不够聪明,无法复制它。

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题,所以我建议尝试以下方法:

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

    【讨论】:

    • 尝试更改本地副本无济于事。框架在主项目上是 4.5,在另一个项目上是 2.0。谢谢你的想法,我以前被咬过。
    【解决方案3】:

    好吧,终于明白了……我想。

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

    作为记录:您可以参考我描述的方式(A refs B which refs C)并复制输出。我确实回到了 dll 引用而不是项目引用,并且在清理和构建后它仍然有效。

    我仍然不确定为什么我能够让它在新解决方案中工作(在进行更改之前),但我现在已经启动并运行了。

    编辑: 另请注意,项目中似乎没有 assembly.cs(这就是它没有任何版本信息的原因)。我想知道它是否只是这个项目的重新编译,可以修复它而不是更新程序集信息。

    【讨论】:

    • 我不知道为什么添加这些信息会有所不同,但不管怎样……
    • 如果有人知道我很乐意将他们的答案标记为正确!
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 2018-11-02
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多