В нашем веб-интерфейсе ASP.NET Core мы пытаемся загрузить неуправляемый код C ++ из библиотеки DLL, которую мы включили в нашу опубликованную папку.
Это не удается при вызове конечной точки, которая загружает библиотеку DLL.Исключением является следующее:
DllNotFoundException: Unable to load DLL 'libespeak-ng' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Следует отметить, что эта DLL загружается и работает нормально, когда приложение запускается через Visual Studio.Запуск приложения в Kestrel с помощью команды dotnet также работает правильно на том же сервере.Только внутри IIS приложение не может загрузить эту DLL.
Мы убедились, что пользователь IIS (а также пул приложений по умолчанию) имеет разрешение на чтение и выполнение DLL.Мы попытались поместить DLL в папку bin приложения, в System32, в SysWOW64 и в различные каталоги inetsrv.Ничто из этого не решило проблему.
Глядя на ProcMon, кажется, что IIS даже не пытается загрузить DLL.Dependency Walker не обнаруживает отсутствующих зависимостей, которые также отсутствуют при запуске его с Kestrel на любом компьютере.