创建带Docker支持的Service Fabric示例应用遇FabricCommon.dll加载失败
解决Service Fabric Docker应用启动时
FabricCommon.dll找不到的问题 我之前调试Service Fabric Docker应用时也碰到过一模一样的错误,结合你给出的环境信息(VS2017社区版、Docker 18.04.0-ce-win62、Service Fabric SDK 3.1.269),给你整理几个亲测有效的排查和修复步骤:
1. 先修复Service Fabric SDK的安装
有时候SDK的依赖文件会因为安装中断或缓存损坏缺失,直接修复是最省心的办法:
- 打开控制面板 > 程序和功能,找到
Microsoft Azure Service Fabric SDK,右键选择更改,然后点击修复选项。修复过程会自动补全缺失的SDK相关文件,包括FabricCommon.dll。 - 修复完成后重启Visual Studio,再重新构建运行应用试试。
2. 检查Dockerfile里的依赖复制步骤
带Docker的Service Fabric应用需要把本地SDK的核心依赖复制到容器环境中,你得确认Dockerfile有没有做这件事:
- 默认
FabricCommon.dll的路径在C:\Program Files\Microsoft SDKs\Service Fabric\bin\Fabric\Fabric.Code下,在Dockerfile里加上这段复制命令:COPY ["C:/Program Files/Microsoft SDKs/Service Fabric/bin/Fabric/Fabric.Code/FabricCommon.dll", "./"] - 另外还要确保容器的环境变量
Fabric_Setup_Complete设置为true,不然Service Fabric运行时会认为环境未准备就绪。
3. 重置本地Service Fabric集群
本地集群偶尔会因为状态异常导致依赖加载失败,重置一下就能解决大部分环境问题:
- 从开始菜单搜索打开Service Fabric本地集群管理器,先点击Stop Cluster等待集群完全停止,再点击Reset Cluster重置本地集群环境。
- 重置完成后启动集群,再尝试运行你的应用。
4. 验证项目输出和NuGet包版本
- 右键项目选择属性,进入生成选项卡,查看输出路径下的文件中是否包含
FabricCommon.dll,如果没有就手动把SDK目录下的该文件复制到输出目录。 - 同时检查项目中Service Fabric相关NuGet包(比如
Microsoft.ServiceFabric)的版本是否和你的SDK版本3.1.269匹配,版本不兼容也会导致这类依赖找不到的问题。
5. 检查Docker共享目录权限
Windows Docker的共享目录权限经常出问题,会导致文件无法正确复制到容器中:
- 打开Docker设置,进入Shared Drives选项卡,确认SDK所在的C盘已被勾选,点击Apply时输入你的Windows账户密码完成授权。
- 之后重新构建Docker镜像再运行应用。
内容的提问来源于stack exchange,提问作者Rajeswari ML
相关产品推荐
相关产品推荐

