【发布时间】: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