在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运行它时,它也不会丢失。
答案 0 :(得分:1)
经过许多小时的努力,并尝试了其他用户提出的解决方案,我们终于找到了问题所在。
该DLL试图访问Windows Server 2012 R2中显然不存在的某些Windows API。一旦我们将服务器更新到最新的Windows服务器版本,一切都会正常工作。