我有一个在Azure中托管的Web应用程序。运行应用程序并对用户进行身份验证时,出现错误“找不到依赖的DLL之一”。
背景:
在Web应用程序中,我正在使用指纹扫描仪功能来捕获指纹图像。为了在用户注册期间捕获指纹图像,我使用了一个javascript库,它可以正常工作。我正在将指纹存储在存储中。当用户登录网站时,我需要执行身份验证,然后再次从用户那里捕获指纹并将其与与该用户关联的指纹进行比较。为了在服务器端比较两个指纹图像,我的C#代码调用了指纹扫描仪SDK,而指纹扫描仪SDK又调用了依赖的DLL(来自System32),我猜它是指纹扫描仪SDK附带的。当我在本地运行站点时,它工作正常(因为我在本地计算机上安装了指纹SDK)。但是,当我在Azure上部署应用程序并执行此代码时,出现错误“找不到依赖的DLL之一”。我了解运行时正在从Azure环境中不存在的system32文件夹中寻找依赖的DLL之一。
我尝试将指纹扫描仪DLL复制到Azure Web应用程序bin文件夹,但是不起作用。我收到错误,试图加载格式错误的程序。 (来自HRESULT的异常:0x8007000B)。
Image - which shows DLL added to root folder
我还尝试将系统32个DLL包含到.net核心类库项目中,但它给出错误该引用无效或不受支持
Image - Error while adding system32 DLL to .net core project
是否可以在Azure Web应用程序上安装第三方软件?
答案 0 :(得分:1)
您无法在App Service中直接安装第三方DLL。解决此问题的一种方法是将应用程序部署在Windows容器中,App Service将拉并运行该容器。另一种方法是使用虚拟机代替App Service,这样您就可以完全控制该计算机,并且可以安装所需的任何内容。
答案 1 :(得分:0)
一种可能性是在App Service中使用Windows容器。
在这里您可以按照快速入门在App Service中运行Windows容器:
https://docs.microsoft.com/en-us/azure/app-service/app-service-web-get-started-windows-container
答案 2 :(得分:0)
以下将是解决问题的步骤
•确保将正确的本机库(第三方DLL)复制到服务器上的wwwroot文件夹(64位或32位)
•检查azure Web服务配置平台(如果第三方dll是64位,则更改为64位)
•在Visual Studio中,使用Web部署发布应用程序以确保部署模式是自包含的并且目标运行时为win-x64
需要注意的其他事项
•如果项目位于.net核心中,则我们无法添加直接的第三方dll引用,我们需要添加一个现有项,并在dll的属性中确保其始终复制
•根据项目要求将平台目标更改为64位或32位
以上步骤对我有用