VS2017 Xamarin Android发布模式下System.Runtime加载失败求助
我之前在VS2017开发Xamarin Android应用时,也碰到过和你完全一样的问题——调试开了共享运行时一切正常,一关就报找不到System.Runtime的错误。给你几个亲测有效的解决思路:
统一NuGet包版本
大概率是不同NuGet包引用的System.Runtime版本不一致导致的。右键解决方案→「管理解决方案的NuGet程序包」,找到所有和System.Runtime相关的包(比如System.Runtime、System.Runtime.Extensions),确保所有项目的版本完全统一,最好更新到稳定版。操作完记得清理解决方案再重新生成。手动添加程序集绑定重定向
如果版本不一致的问题没法通过更新包解决,就手动加绑定重定向。在Android项目根目录新建一个app.config文件,加入以下配置:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.20.0" newVersion="4.3.0.0" /> <!-- 这里的newVersion要换成你项目实际用的版本,可在obj\Debug\project.assets.json里搜索System.Runtime找到 --> </dependentAssembly> </assemblyBinding> </runtime> </configuration>加完之后重新生成项目,再尝试发布。
调整发布模式的项目设置
去项目属性的Android选项卡,发布模式下暂时关闭「代码优化」选项——有时候编译器的优化会误删必要的程序集依赖。另外检查你的目标Android框架版本,确保对应的SDK和工具都安装完整,也可以尝试切换到稍低一点的稳定版本试试。彻底清理重建项目
这个方法看似简单但经常能解决奇怪的问题:先点Build→「Clean Solution」,然后手动删除所有项目下的bin和obj文件夹,再重新生成整个解决方案,发布前记得选择「重新生成所有项目」。排查第三方库依赖
有些第三方NuGet包会隐式依赖特定版本的System.Runtime,你可以在NuGet包管理器的「已安装」标签里,逐个查看每个包的依赖项,看看有没有冲突的版本。必要时更新或者替换那些依赖旧版本的库。
内容的提问来源于stack exchange,提问作者Jerry Dubuke

