3

我在调用非托管程序集的托管 (C#) 应用程序中看到以下异常:

Caught:System.IO.FileLoadException '动态链接库 (DLL) 初始化例程失败。(来自 HRESULT 的异常:0x8007045A)'

这个 HRESULT 是什么意思,我应该从哪里开始诊断?

4

4 回答 4

4

在升级 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>
于 2011-09-19T10:17:53.460 回答
3

FileLoadException 类

表示找到程序集文件但无法加载时发生的错误。

当文件因为无法定位而无法加载时,会引发 FileNotFoundException 异常。如果找到文件,但由于权限不足而无法加载,则抛出 SecurityException。

FileLoadException 的默认 HRESULT 为 COR_E_FILELOAD,其值为 0x80131621,但这不是唯一可能的 HRESULT。

如果您的代码没有 PathDiscovery 权限,则此异常的错误消息可能仅包含文件或目录名称,而不是完全限定的路径。

直接从 MSDN 引用:
链接文本

这通常只是能够找到所需库的问题。

于 2009-11-17T10:45:37.300 回答
2

或者,您尝试加载的 DLL 正在尝试加载丢失的 DLL,请检查 DLL上的DEPENDS.EXE

于 2009-11-17T11:12:57.793 回答
0

我在应用程序关闭时收到此错误。它似乎是由控件中的垃圾收集“Finalize”方法引发的,该控件引用了多个 DLL 中的多个 COM+ 模块和其他非托管程序集。

我更正了控件的 Dispose 方法以调用 GC.SuppressFinalize 并在控件中设置了一个标志,以便托管代码部分只运行一次。我还使用控件修改了表单,因此它们总是被显式关闭。

于 2020-09-24T20:18:33.553 回答