.NET Core类库在Xamarin Forms PCL中出现程序集版本冲突报错求助
先把你遇到的错误贴出来,方便大家定位:
Severity Code Description Project File Line Suppression State
Error CS1705 Assembly 'xxx' with identity 'xxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
这个问题本质是PCL项目的目标框架和System.Data.SqlClient 4.4.3的依赖版本不兼容:.NET Core类库能很好适配这个包的依赖,但旧的PCL(可移植类库)对System.Runtime的版本要求更低,而4.4.3版本的SqlClient依赖的是更高版本的System.Runtime(4.2.0.0),导致引用冲突。
给你几个可行的解决思路:
1. 最推荐:把PCL换成.NET Standard类库
Xamarin官方早就不主推PCL了,.NET Standard是现在跨平台类库的标准,和.NET Core类库的依赖体系完全兼容,能从根源上避免这类版本冲突问题。操作步骤很简单:
- 新建一个.NET Standard类库(选2.0及以上版本,和你的.NET Core类库匹配)
- 把原来PCL里的代码迁移过去
- 引用你的ADO.NET类库,这样依赖版本就能自动对齐了
2. 保留PCL的情况下修复版本冲突
如果你暂时不想换项目类型,可以试试这两个办法:
方法A:添加绑定重定向
在PCL项目的.csproj文件里手动添加版本绑定重定向,强制让项目使用更高版本的System.Runtime:
<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
然后重新编译项目,看看冲突是否解决。
方法B:降级System.Data.SqlClient版本
4.4.x版本的System.Data.SqlClient对.NET Standard的依赖提升了,对PCL的支持不太友好。你可以尝试降级到4.3.0版本,这个版本对PCL的兼容性更好,能避免System.Runtime的版本冲突。直接在NuGet包管理器里卸载4.4.3,安装4.3.0即可。
3. 替换为更适配Xamarin的SqlClient版本
微软已经把System.Data.SqlClient的后续维护转到了Microsoft.Data.SqlClient,这个包对Xamarin的支持更完善,你可以尝试把类库中的System.Data.SqlClient替换成Microsoft.Data.SqlClient,选择一个兼容PCL或者.NET Standard的版本,这样也能解决这类依赖问题。
内容的提问来源于stack exchange,提问作者Freeedy

