无法在运行时加载程序集

时间:2012-04-11 17:11:59

标签: c# .net-assembly fusion

这很奇怪......

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

真的很基本。我使用Assembly.LoadFrom("c:\\test\\mytestlibrary.dll")但Fusion无法找到该文件(我得到FileNotFoundException)。

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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,融合日志还应显示所寻求的路径列表。你的路径包括在内吗?此外,程序集是否已作为项目引用加载或以前在同一应用程序域中加载?