.NET Core ASP.NET应用程序无法在IIS下加载非托管DLL

时间:2019-06-12 07:18:35

标签: c# iis asp.net-core

在ASP.NET Core Web API中,我们试图从发布文件夹中包含的DLL加载非托管C ++代码。

这在调用加载DLL的端点时失败。例外如下:

DllNotFoundException: Unable to load DLL 'libespeak-ng' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

应注意,当该应用程序通过Visual Studio运行时,此DLL加载并正常运行。使用dotnet命令在Kestrel中运行应用程序也可以在同一服务器上正常运行。该应用程序仅在IIS内部无法加载此DLL。

我们确保IIS用户(以及默认应用程序池)具有读取和执行DLL的权限。我们尝试将DLL放置在app bin文件夹,System32,SysWOW64和各个inetsrv目录中。这些都不能解决问题。

看着ProcMon,似乎IIS甚至都没有尝试加载DLL。 Dependency Walker不会显示任何遗失的依赖关系,当在任何计算机上使用Kestrel运行它时,它也不会丢失。

1 个答案:

答案 0 :(得分:1)

经过许多小时的努力,并尝试了其他用户提出的解决方案,我们终于找到了问题所在。

该DLL试图访问Windows Server 2012 R2中显然不存在的某些Windows API。一旦我们将服务器更新到最新的Windows服务器版本,一切都会正常工作。