libsodium-64.dll在生产 Azure Service Fabric 群集中找不到

本文关键字:Fabric 群集 集中 找不到 Service Azure dll libsodium-64 | 更新日期: 2023-09-27 17:57:10

在 Azure Service Fabric 可靠服务中使用 libsodium-net 来实现其所有安全性,在我的本地开发群集上一切正常(尽管我确实必须设置 libsodium-64.dll 复制到输出目录)。

遗憾的是,当部署到 Azure 中的实际群集时,它会引发以下错误:

Unable to load DLL 'libsodium-64.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我已经通过远程桌面检查到其中一个节点,并且 DLL 被复制到与服务相同的目录中,就像在我的开发群集中一样。无法弄清楚为什么在生产中找不到它。

我已经尝试按照此答案中的建议设置 PATH 环境变量,并验证它确实被设置了 - 不幸的是这没有帮助。

我需要做什么特别的事情才能让 ASF 拿起 DLL?

编辑:还尝试在所有节点上将DLL添加到System32中,也没有解决。

libsodium-64.dll在生产 Azure Service Fabric 群集中找不到

事实证明,

libsodium-64.dll取决于Visual C++运行时,Azure VM 上似乎不存在该运行时。 运行此处提到的进程监视器,看到它正在拾取"libsodium-64.dll"但在"vcruntime140.dll"上失败 - 仅异常消息就几乎无法解决。

在 VM 上安装了可视C++可再发行组件,现在一切似乎都运行良好。

如果有人碰巧遇到同样的问题,可以通过将以下扩展添加到 ARM 部署模板中规模集的 VM 配置文件(VMSS ->属性 -> 虚拟机配置文件 -> 扩展配置文件 -> 扩展)来解决它:

{
    "name": "InstallVCRuntime",
    "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "fileUris": [
                "https://some.blob.storage.url/vc_redist.x64.exe"
            ],
            "commandToExecute": "vc_redist.x64.exe /q /norestart"
        }
    }
}

它所做的只是抓住安装程序,然后静默运行它。似乎没有指向可再发行组件的公共链接,所以我只是下载了它并将其放入 blob 存储中。