Azure Web 应用程序中未找到 Win32 DLL 错误

Win32 DLL not found error in Azure Web Application

我有一个托管在 Azure 中的 Web 应用程序。当我 运行 应用程序并对用户进行身份验证时,出现错误 "One of the dependent DLL not found"。

背景:

在 Web 应用程序中,我使用指纹扫描仪功能来捕获指纹图像。为了在用户注册期间捕获指纹图像,我使用了 javascript 库,它工作正常。我正在将指纹存储在存储器中。当用户登录网站时,我需要执行身份验证,我再次从用户那里捕获指纹并将其与与用户关联的指纹进行比较。为了在服务器端比较两个指纹图像,我的 C# 代码调用了指纹扫描仪 SDK,它又调用了依赖 DLL(来自 System32),我猜它是指纹扫描仪 SDK 附带的。当我在本地 运行 网站时,它工作正常(因为我在本地机器上安装了指纹 SDK)。但是当我在 Azure 上部署应用程序并执行此代码时,我收到错误 "One of the dependent DLL not found"。我了解 运行 时间正在从 system32 文件夹中寻找依赖 DLL 之一,该文件夹在 Azure 环境中不存在。

我尝试将指纹扫描仪 DLL 复制到 Azure Web 应用程序 bin 文件夹,但它不起作用。我收到错误 试图加载格式不正确的程序。 (HRESULT 异常:0x8007000B).

Image - which shows DLL added to root folder

我也尝试将系统 32 DLL 包含到 .net 核心 class 库项目,但它给出错误 引用无效或不受支持

Image - Error while adding system32 DLL to .net core project

有没有办法在 Azure 网络应用程序上安装第三方软件?

您不能在应用服务中直接安装第 3 方 DLL。解决此问题的一种方法是将您的应用程序部署在 App Service 将拉取的 Windows 容器和 运行 中。另一种方法是使用虚拟机而不是应用服务,这样你就可以完全控制机器,你可以安装任何你想要的东西。

一种可能性是在应用服务中使用 Windows 容器。

在这里您可以按照快速入门 运行 应用服务中的 Windows 容器:

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-get-started-windows-container

以下是解决问题的步骤

• 确保将正确的本机库(第三方 DLL)复制到服务器上的 wwwroot 文件夹(64 位或 32 位)

• 检查azure web 服务配置平台(如果第三方dll 是64 位则更改为64 位)

• 从 visual studio 开始,同时使用 Web 部署发布应用程序以确保部署模式为 self-contained 并且目标运行时为 win-x64

需要注意的其他事项

• 如果项目在 .net 核心中,那么我们不能添加直接的第三方 dll 引用,我们需要添加一个现有的项目并且在 dll 的 属性 中确保它总是复制

• 根据项目要求将平台目标更改为 64 位或 32 位

以上步骤对我有用