0

这很奇怪...

在我的一个项目中,我需要在运行时加载外部 dll。我以前经常这样做,我以为我已经踩到了那里的所有地雷,但到目前为止,这个地雷已经让我做得最好了。

这真的非常非常基本。我使用Assembly.LoadFrom("c:\\test\\mytestlibrary.dll")但 Fusion 找不到文件(我得到一个FileNotFoundException)。

我像往常一样检查了融合日志,但这没有任何意义。即使我提供了完整的绝对路径,是否存在某些情况会以某种方式阻止 Fusion 找到文件?我怀疑有问题的 dll 需要一些其他程序集,但查看融合日志并不能表明这一点。此外,测试库不引用主机程序集未引用的任何内容。

有什么建议么?

4

1 回答 1

1

也许 Suzzanne Cook 的这篇博文会提供一些线索?

对于 FileNotFoundException:日志底部将是 Fusion 尝试探测此程序集的路径。如果这是按路径加载(如在 Assembly.LoadFrom() 中),则只有一个路径,并且您的程序集需要在那里才能找到。否则,您的程序集将需要位于列出的探测路径之一或 GAC 中(如果要找到它)。

如果程序集的非托管依赖项或内部模块加载失败,您也可能会收到此异常。尝试在文件上运行depends.exe 以验证是否可以加载非托管依赖项。请注意,如果您使用的是 ASP.NET,则它使用的 PATH 环境变量可能与命令行使用的不同。如果所有这些都可以加载,请在文件上尝试 ildasm.exe,双击“MANIFEST”并查找“.file”条目。这些文件中的每一个都需要与包含清单的文件位于同一目录中。-- http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx

IIRC,融合日志还应该显示寻求的路径列表。你的路径包括吗?此外,该程序集是否已经作为项目引用加载,或者以前在同一个应用程序域中?

于 2012-04-11T17:22:22.467 回答