【问题标题】:"System.IO.FileNotFoundException: Could not load file or assembly" when the assembly does in fact exist当程序集确实存在时,“System.IO.FileNotFoundException:无法加载文件或程序集”
【发布时间】:2009-10-08 22:34:14
【问题描述】:

作为从 .net 1.1 迁移到 .net 3.5 的一部分,我们不得不更改一些供应商 DLL。

其中一个在我们使用它的 4 个位置中只有一个给我们带来了麻烦:

问题点是一个 Windows 窗体项目,它使用反射来动态加载一些运行长时间运行的进程的 DLL。这些长期运行的进程之一是依赖于我们的供应商 DLL 之一的代理

在我们第一次输入引用库的函数时,我们得到了缺少的程序集异常。我已经检查了一些愚蠢的事情,例如我们是否忘记将引用从旧版本移动到新版本,但事实并非如此。我还检查了项目的bin目录,程序集就在那里。

有没有人遇到过 .net 2.0 运行时拒绝加载这样的程序集的情况?如果是这样,我们该如何解决这个问题。

附加信息:

在这种情况下,特定的供应商是 dtSearch,这是引发错误的边界:

Private Sub BuildIndex()
    SetIndexOptions()
    ExecuteIndexJob()
End Sub

Private Sub SetIndexOptions()
    'Body removed for brevity
End Sub

在 SetIndexOptions 中引用了该库。 BuildIndex() 被输入,但在调用 SetIndexOptions 时发生异常。该函数从未真正输入过。

【问题讨论】:

    标签: vb.net filenotfoundexception assembly-loading


    【解决方案1】:

    如果您仍然遇到问题,您可以使用Assembly Binding Log Viewer (Fuslogvw.exe) 来确定您的应用程序加载了哪些程序集。此工具是 .NET Framework 的一部分。这将为您提供所有相关程序集的详细信息。

    我过去在处理第三方程序集时使用过这个,非常有用

    【讨论】:

      【解决方案2】:

      如果无法加载依赖程序集之一,即使程序集确实存在,也会引发 FileNotFoundException。

      尝试使用Dependency Walker 检查并查看所有依赖程序集是否也存在。

      【讨论】:

      • 嗯,这让事情变得复杂了。我试图加载的 DLL 说它缺少两个我从未听说过的 DLL(如果有任何含义的话,IESHIMS.DLL 和 WER.DLL),但同时,.net 1.1 版本的 DLL 也是缺少这些组件并且一直运行良好。
      • 这 2 个程序集很可能是红鲱鱼 - 我认为我打开的大多数程序集都缺少这 2 个,即使它们工作正常。
      • 是的 - 根据 Dependency Walker。尝试融合日志记录,或者可能使用反射器遍历并打开所有引用的程序集。
      【解决方案3】:

      原来默认的编译选项从VS2003改成了VS2008,而且编译的位数不对:\现在我觉得有点傻!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 2023-02-07
        • 1970-01-01
        • 2012-12-28
        • 2016-08-16
        相关资源
        最近更新 更多