【发布时间】:2020-09-25 04:18:33
【问题描述】:
我在调用非托管程序集的托管 (C#) 应用中看到以下异常:
Caught:System.IO.FileLoadException '动态链接库 (DLL) 初始化例程失败。 (来自 HRESULT 的异常:0x8007045A)'
这个 HRESULT 是什么意思,我应该从哪里开始诊断?
【问题讨论】:
我在调用非托管程序集的托管 (C#) 应用中看到以下异常:
Caught:System.IO.FileLoadException '动态链接库 (DLL) 初始化例程失败。 (来自 HRESULT 的异常:0x8007045A)'
这个 HRESULT 是什么意思,我应该从哪里开始诊断?
【问题讨论】:
在将 VS 2008 中的解决方案升级到 .NET 框架 v2.0 的项目到目标运行时 v 4.0 的 VS 2010 后,我遇到了这个错误。我得到的例外是:
无法加载文件或程序集“XYZ.dll”或其依赖项之一。动态链接库 (DLL) 初始化例程失败。 (HRESULT 异常:0x8007045A)":"XYZ.dll
已通过将以下部分添加到设置为启动的项目的 App.config 文件中来解决此问题:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
【讨论】:
FileLoadException 类
表示发生的错误时 找到了一个程序集文件,但无法找到 已加载。
FileNotFoundException 异常是 文件加载失败时抛出 因为无法定位。如果 文件已找到,但无法加载 由于权限不足, 抛出 SecurityException。
FileLoadException 有默认值 COR_E_FILELOAD 的 HRESULT,它有 值 0x80131621,但这不是 唯一可能的 HRESULT。
如果您的代码没有 PathDiscovery 权限,报错 此异常的消息可能只 包含文件或目录名称 而不是完全限定的路径。
直接引自 MSDN:
link text
这通常只是能够找到所需库的问题。
【讨论】:
或者,您尝试加载的 DLL 正在尝试加载丢失的 DLL,请检查 DLL 上的DEPENDS.EXE。
【讨论】:
我在应用程序关闭时收到此错误。它似乎是由控件中的垃圾收集“Finalize”方法引发的,该控件引用了多个 DLL 中的多个 COM+ 模块和其他非托管程序集。
我更正了控件的 Dispose 方法以调用 GC.SuppressFinalize 并在控件中设置了一个标志,以便托管代码部分只运行一次。我还使用控件修改了表单,因此它们总是被显式关闭。
【讨论】: