【问题标题】:.NET app exits with exception 0xe0434352 assembly load failed but which one?.NET 应用程序退出异常 0xe0434352 程序集加载失败但哪一个?
【发布时间】:2016-01-26 21:58:18
【问题描述】:

我有一个使用 VS2012 创建的 .NET 4.0 应用程序,它在我的开发系统上运行良好。它有几个来自第 3 方和我编写的非托管 DLL。所有这些 DLL 都与 .NET app.exe 位于同一文件夹中。但是,远程客户在启动时遇到异常 0xE0434352。应用程序退出时没有消息,但在事件查看器中看到异常。查看另一个 post 我发现这是通用的 .NET 异常。事件查看器中另一个更有意义的例外是

Application: ModBusCdi75Api.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
   at ModBusCdi75Api.MainForm..ctor()
   at ModBusCdi75Api.Program.Main()

所以似乎没有找到一个程序集,但异常并没有说明是哪一个。从另一篇文章中,我看到Fusion Log 是一种获取有关未找到哪个程序集的更多信息的方法。问题是这只发生在我的远程客户的站点上。我需要让我的客户运行融合日志吗?如果客户端没有 Visual Studio,这可能吗?

【问题讨论】:

  • 这看起来不像是程序集加载错误,更像是一个简单的文件未找到。
  • 那么我需要弄清楚如何获取未找到的文件名。但是查看构造函数(MainForm..ctor)我没有看到任何文件打开操作。还有其他方法被调用,但如果它发生在应该出现在堆栈跟踪中的被调用函数中。当我阅读堆栈跟踪时,它说 FileIO 错误发生在构造函数本身中。此外,如果不是 DLL 的程序集加载问题,而是一个简单的 File Not Found 错误,为什么客户没有看到显示的异常窗口?
  • 也许找不到从您的几个非托管 DLL 传播回来的文件?

标签: .net dll .net-assembly unmanaged filenotfoundexception


【解决方案1】:

您不需要安装 Visual Studio 或 SDK,您可以直接在注册表中启用 Fusion 日志记录。将以下内容保存到 .reg 文件并让客户在远程计算机上运行它:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"ForceLog"=dword:00000001 
"LogFailures"=dword:00000001 
"LogResourceBinds"=dword:00000001 
"LogPath"="C:\\Temp\\FusionLog\\"

确保日志路径确实存在,然后重启应用生成程序集绑定日志。

请注意,如果问题不是由托管 DLL 引起的,则日志不会显示任何有用的信息。您可能需要求助于远程调试,或手动跟踪您的应用程序加载的所有非托管依赖项并检查它们是否存在于远程计算机上(或将它们包含在您的发行版中。)

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2012-12-17
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多