在Xamarin.Forms中使用StructureMap遇部署加载错误求助
解决Xamarin.Forms + StructureMap/EF Core SQLite部署时的System.Runtime.Loader.dll缺失问题
我之前在使用VS2017 15.x版本搭配Xamarin.Forms 3.x时,也碰到过完全一样的问题,核心原因是StructureMap 4.6.1和部分高版本EF Core依赖的System.Runtime.Loader库在旧版Xamarin.Android的运行环境下存在兼容性缺陷,下面是我亲测有效的解决方案:
1. 降级StructureMap版本到4.0.1
StructureMap 4.6.x系列对.NET Standard的依赖引入了System.Runtime.Loader,而这个库原本是为.NET Core设计的,旧版Xamarin.Android无法正确加载它。降级到4.0.1版本可以避开这个问题,该版本对Xamarin的支持更稳定:
- 打开NuGet包管理器,卸载当前的StructureMap 4.6.1
- 搜索并安装
StructureMap,选择版本4.0.1
2. 升级共享项目到.NET Standard 2.0
如果你的Xamarin.Forms共享项目还是基于.NET Standard 1.x,建议升级到2.0:
- 右键共享项目 → 属性 → 应用程序 → 目标框架,选择
.NET Standard 2.0 - 清理解决方案后重新还原NuGet包,这能大幅改善依赖解析的兼容性
3. 适配EF Core SQLite的版本
高版本EF Core同样会引入System.Runtime.Loader相关依赖,建议降级到2.1.x版本(比如2.1.14),这个版本和Xamarin.Forms 3.0的适配性最好:
- 卸载当前的
Microsoft.EntityFrameworkCore.Sqlite及相关EF Core包 - 安装
Microsoft.EntityFrameworkCore.Sqlite版本2.1.14
4. 彻底清理重建项目
做完上面的调整后,一定要彻底清理项目避免缓存问题:
- 点击菜单「生成」→「清理解决方案」
- 手动删除所有项目下的
bin和obj文件夹 - 右键解决方案 →「还原NuGet包」
- 重新生成项目并部署
补充说明
旧版VS2017的Xamarin.Android工具链在处理.NET Standard依赖时,对System.Runtime.Loader这类.NET Core专属库的路径解析存在bug,导致部署时找不到对应的dll文件。通过调整依赖版本和目标框架,就能避开这个兼容性坑。
内容的提问来源于stack exchange,提问作者Rom Eh
相关产品推荐
相关产品推荐

