1

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

4

3 回答 3

1

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

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

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

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

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

于 2013-11-01T17:43:55.443 回答
1

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

  • 将“复制本地”切换为“false”,然后再次切换为“true”,它应该可以解决问题,如果问题是 < Private > True < /Private >项目文件中缺少节点
  • 检查您项目的目标框架,我有几个针对“4.0框架”和其他“4.0客户端配置文件”的项目有类似的问题,在每个项目上切换到“4.0”后都解决了
于 2013-11-01T17:45:49.470 回答
1

您可以做的最好的事情是在一个 Visual Studio解决方案A中拥有项目、B和所有项目,然后您可以在不引用 dll 的情况下引用您需要的其他项目。C

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

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

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

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

于 2013-11-01T17:36:40.593 回答