【问题标题】:libsodium-64.dll not found in production Azure Service Fabric cluster在生产 Azure Service Fabric 群集中找不到 libsodium-64.dll
【发布时间】:2016-11-17 21:56:44
【问题描述】:

在 Azure Service Fabric Reliable Service 中使用 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 复制到与服务相同的目录中,与我的开发集群中的完全相同。无法弄清楚为什么在生产中找不到它。

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

为了让 ASF 获取 DLL,我需要做些什么特别的事情吗?

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

【问题讨论】:

  • 这里真的不应该有什么特别之处。您是否能够修改服务以打印出它认为在其工作目录中的内容并检查路径?
  • 是的,不认为应该有,记录 Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory) 显示“D:\SvcFab_App\...\...Pkg.Code.1.0.0\libsodium-64.dll”为在那里。路径显示 C:\Windows\system32、Windows 和常用位置。
  • @TomDavies 和Environment.CurrentDirectory 是什么样的?您能否为生产环境和本地环境提供这些路径。
  • @cassandrad: Environment.CurrentDirectory 在我的本地环境中是“C:\\SfDevCluster\\Data\_App\_Node_4\\XYZType_App12\\work”,“D:\SvcFab_App\XYZType_App9\work”用于生产。为“工作”打印文件会显示类似的 .SFlog 文件集合和命名为生产和本地随机 GUID 的文件。
  • 谢谢大家 - 终于到了。原来 DLL 依赖于不在 VM 上的 vcruntime140.dll!

标签: c# azure-service-fabric libsodium


【解决方案1】:

原来 libsodium-64.dll 依赖于 Visual C++ 运行时,Azure VM 上似乎不存在该运行时。 Ran Process Monitor 如提到的 here 并看到它正在拾取“libsodium-64.dll”但在“vcruntime140.dll”上失败 - 仅异常消息就使得这几乎不可能解决。

在虚拟机上安装了 Visual C++ Redistributable,现在一切似乎都运行良好。

如果有人碰巧遇到同样的问题,您可以通过将以下扩展添加到 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 存储中。

【讨论】:

  • 在重新启动机器后为我工作,还打包了一个发布版本以防止调试 dll。谢谢!
  • 对不起,如果集群是通过 Azure 门户创建的,那么在哪里可以找到这个 ARM 部署模板?
  • @JohannesHeesterman,没问题。您可以从门户中导出它。找到您的集群,然后转到设置 > 自动化脚本,它会为您提供模板以及各种部署方式。
猜你喜欢
  • 2018-10-27
  • 2016-12-06
  • 2023-03-02
  • 2016-09-28
  • 2016-10-23
  • 2020-01-12
  • 2019-02-23
  • 2021-04-18
  • 2018-10-08
相关资源
最近更新 更多