在 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 依赖于 Visual C++ 运行时,而 Azure VM 上似乎不存在该运行时。然过程监控器如上所述here并看到它正在获取“libsodium-64.dll”,但在“vcruntime140.dll”上失败 - 仅异常消息就使得这几乎不可能解决。
在虚拟机和所有东西上安装了 Visual C++ Redistributableseems现在工作得很好。
如果有人碰巧遇到同样的问题,您可以通过将以下扩展添加到 ARM 部署模板中规模集的 VM 配置文件中来解决该问题(VMSS -> 属性 -> virtualMachineProfile -> extensionProfile -> 扩展):
{
"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 存储中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)