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

Tom*_*ies 3 c# libsodium azure-service-fabric

使用libsodium-net在Azure Service Fabric Reliable Service中实现其所有安全性,在我的本地开发群集上一切正常(尽管我必须将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,也没有解决它.

Tom*_*ies 7

原来libsodium-64.dll依赖于Visual C++ Runtime,它似乎不存在于Azure VM上.Ran Process Monitor就像这里提到的那样,看到它正在拾取"libsodium-64.dll",但是在"vcruntime140.dll"上失败 - 单独的异常消息使得这几乎无法解决.

安装在虚拟机中的Visual C++可再发行,一切似乎是现在的工作很好.

如果有人碰巧遇到同样的问题,您可以通过将以下扩展添加到ARM部署模板中设置的比例的VM配置文件(VMSS - > properties - > virtualMachineProfile - > extensionProfile - > extensions)来解决此问题:

{
    "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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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