使用VS2017构建Xamarin.Forms应用遇Microsoft.Net.Http兼容警告如何解决?
嘿,这个问题我之前帮好几个开发者处理过,咱们先搞懂警告的核心原因,再一步步解决:
Package 'Microsoft.Net.Http 2.2.29' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
这个警告说白了就是:Microsoft.Net.Http 2.2.29是个比较老旧的包,它最初是为传统.NET Framework设计的,根本没针对.NET Standard 2.0做适配。当你的项目以.NET Standard 2.0为目标框架时,NuGet找不到对应版本的包,只能退而求其次用.NET Framework 4.6.1的版本来恢复,自然会提示兼容性风险。
下面是几种解决方法,按优先级排序:
1. 替换为.NET Standard原生支持的System.Net.Http(强烈推荐)
.NET Standard 2.0已经内置了System.Net.Http库,完全不需要安装第三方的Microsoft.Net.Http包。具体操作:
- 打开Visual Studio的NuGet包管理器,找到已安装的
Microsoft.Net.Http 2.2.29,点击「卸载」。 - 在代码里直接引用
using System.Net.Http;,就可以正常使用HttpClient类了——这是Xamarin.Forms和.NET生态官方推荐的HTTP客户端方案,完美适配.NET Standard 2.0,不会有任何兼容性问题。
2. 若必须保留老包,添加绑定重定向(不推荐)
如果因为历史代码依赖等原因必须用这个老包,可以通过修改项目文件来抑制警告,但这只是治标不治本,运行时可能出现未知bug:
- 右键你的Xamarin.Forms项目,选择「编辑项目文件」(.csproj)。
- 在文件中添加以下配置:
<PropertyGroup> <RestoreProjectStyle>PackageReference</RestoreProjectStyle> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup> - 保存文件后重新生成项目,警告应该会消失,但还是建议尽量迁移到原生的
System.Net.Http。
3. 确保Xamarin.Forms版本兼容
检查你的Xamarin.Forms版本是否支持.NET Standard 2.0——一般来说Xamarin.Forms 3.0及以上版本都完美支持。如果你的版本太老,建议升级到最新的稳定版,能减少很多框架兼容性问题。
内容的提问来源于stack exchange,提问作者Noor Allan

