.NET应用程序退出,但异常0xe0434352程序集加载失败,但哪个程序集加载失败?

.NET应用程序退出,但异常0xe0434352程序集加载失败,但哪个程序集加载失败?,.net,dll,.net-assembly,unmanaged,filenotfoundexception,.net,Dll,.net Assembly,Unmanaged,Filenotfoundexception,我有一个用VS2012创建的.NET 4.0应用程序,在我的开发系统上运行良好。它有几个非托管DLL的都来自第三方,也由我写的。所有这些DLL都与.NET app.exe位于同一文件夹中。但是,远程客户在启动时收到异常0xE0434352。应用程序退出时不显示任何消息,但在事件查看器中可以看到异常。看看另一个,我发现这是通用的.NET异常。事件查看器中另一个更有意义的异常是 Application: ModBusCdi75Api.exe Framework Version: v4.0.30319

我有一个用VS2012创建的.NET 4.0应用程序,在我的开发系统上运行良好。它有几个非托管DLL的都来自第三方,也由我写的。所有这些DLL都与.NET app.exe位于同一文件夹中。但是,远程客户在启动时收到异常0xE0434352。应用程序退出时不显示任何消息,但在事件查看器中可以看到异常。看看另一个,我发现这是通用的.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日志?当客户端没有Visual Studio时,这是否可能?

您不需要安装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引起的,那么日志将不会显示任何有用的内容。您可能需要进行远程调试,或手动跟踪应用程序加载的所有非托管依赖项,并检查它们是否存在于远程计算机上(或将它们包含在您的发行版中)。

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