Xamarin Android项目安装NuGet包失败:兼容性错误求助
嘿,我看你在Xamarin Android项目里装NuGet包时遇到了NU1202报错,连试任意包都出问题?先别慌,从你贴的错误日志来看,核心问题其实很明确:
正在还原E:\Projects\Sample\Sample1\Sample2\Smaple3\SampleApp.Android\SampleApp.Android.csproj的包...
NU1202: 包Microsoft.WindowsAPICodePack.Shell 1.1.0与monoandroid81(MonoAndroid,Version=v8.1)不兼容。该包支持的框架为:net(.NETFramework,Version=v0.0)
NU1202: 包Microsoft.WindowsAPICodePack.Core 1.1.0与monoandroid81(MonoAndroid,Version=v8.1)不兼容。该包支持的框架为:net(.NETFramework,Version=v0.0)
包还原失败。正在回滚'SampleApp.Android'的包更改。
问题根源
Microsoft.WindowsAPICodePack.Shell和Microsoft.WindowsAPICodePack.Core这俩包是Windows桌面平台专属的类库,只支持传统.NET Framework,完全没做Xamarin Android的适配——所以只要你的项目基于MonoAndroid 8.1,装这俩包必然触发兼容错误。如果连其他包也装不了,大概率是这俩包的直接/间接引用卡住了整个还原流程。
具体解决方案
我给你分几种情况来处理:
1. 你其实不需要这俩Windows专属包
- 排查依赖链:看看是不是项目里不小心加了这俩包的引用,或者某个其他包间接依赖了它们。如果是间接依赖,试试把那个包升级到支持Xamarin Android的版本。
- 清理NuGet缓存重置状态:
- 删除项目根目录下的
packages文件夹 - 删掉项目里的
.nuget文件夹(如果存在) - 在Visual Studio中打开「工具 > NuGet包管理器 > 管理解决方案的NuGet包」,切换到「更新」标签,更新所有兼容的包
- 右键项目选择「还原NuGet包」,重新触发还原流程
- 删除项目根目录下的
2. 你确实需要类似Windows Shell的功能
别再死磕WindowsAPICodePack了,换个思路:
- 寻找Xamarin Android专用替代包:搜NuGet时加上「Xamarin Android」或「Android」关键词,找适配Android平台的文件系统、系统交互类库。
- 直接用Android原生API实现:比如用
Android.Content.Intent调用系统文件浏览器,或者用Android.OS.Environment处理文件路径——原生API反而更适配Android平台的特性。
3. (可选)升级项目的MonoAndroid版本
如果项目允许的话,把MonoAndroid版本升级到9.0及以上试试——虽然这俩Windows包还是不兼容,但更高版本的Android框架可能能解决其他通用包的兼容问题。不过升级前记得备份项目,避免出现新的兼容性问题。
避坑小贴士
以后装NuGet包前,一定要先看包详情页的「依赖项」部分,确认它支持对应版本的MonoAndroid;对于Xamarin项目,优先选带「Xamarin」标记的专用包,别碰Windows平台专属类库,能省不少兼容麻烦。
内容的提问来源于stack exchange,提问作者Deepakkumar

