C# 无法在运行时加载程序集

C# 无法在运行时加载程序集,c#,.net-assembly,fusion,C#,.net Assembly,Fusion,这很奇怪 在我的一个项目中,我需要在运行时加载外部dll。我以前经常这样做,我想我已经踩上了那里所有的矿井,但这一个到目前为止已经占了我的上风 这真的很基本。我使用了Assembly.LoadFrom(“c:\\test\\mytestlibrary.dll”),但Fusion找不到该文件(我得到了FileNotFoundException) 我像往常一样检查了fusion日志,但没有任何意义。是否存在某些情况会以某种方式阻止Fusion查找文件,即使我提供了文件的完整和绝对路径?我怀疑有问题的

这很奇怪

在我的一个项目中,我需要在运行时加载外部dll。我以前经常这样做,我想我已经踩上了那里所有的矿井,但这一个到目前为止已经占了我的上风

这真的很基本。我使用了
Assembly.LoadFrom(“c:\\test\\mytestlibrary.dll”)
,但Fusion找不到该文件(我得到了
FileNotFoundException

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


有什么建议吗?

也许苏珊娜·库克的这篇博文会提供一些线索

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

如果未能加载程序集的非托管依赖项或内部模块,也可能会出现此异常。请尝试对该文件运行Dependes.exe,以验证是否可以加载非托管依赖项。请注意,如果使用ASP.NET,则它使用的PATH环境变量可能与命令行使用的环境变量不同。如果可以加载所有文件,请在文件上尝试ildasm.exe,双击“清单”并查找“.file”条目。这些文件中的每一个都需要与包含文件的清单位于同一目录中。 --


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

测试程序集是否引用了与主程序集不同的版本?目标平台是否不同(32位与64位)?这可能是一个愚蠢的问题,但是,您是否完全100%确定文件
C:\test\mytestlibrary.dll
存在?“奇怪”的问题需要在您的问题中提供大量详细信息,因此我们不必问一大堆后续问题。您是否真的按照您试图加载文件的确切路径验证了该文件?是的,我已经检查了Fusion日志,但问题是:当使用Assembly.LoadFrom/LoadFile时,您指定了程序集的确切路径,因此Fusion不需要开始探测。事实上,在使用AppDomain方法动态加载程序集时,使用Assembly.LoadFrom/LoadFile是解决探测问题的常用方法。不管怎样,谢谢你。是她写的。你说你检查了日志-它是否在探测(并列出)其他探测路径?不,它没有记录任何路径,这就是为什么这么奇怪。Fusion开始检查(主机)app.config、machine.config等文件,就像我是通过调用AppDomain.load()而不是Assembly.LoadFile()启动加载一样。您刚才在那里写了“LoadFile”,但我们一直在谈论“LoadFrom”,所以我怀疑这是一个错误。你试过哪种方法可以绕过核聚变吗?