Xamarin.Android优先引用核心类库而非平台特定类库的解决咨询
解决Xamarin.Android优先选择平台特定NuGet程序集的问题
针对你遇到的Microsoft.Identity.Client在Xamarin.Android中无法加载monoandroid90平台特定库的问题,我整理了几个实用的解决方案,帮你摆脱手动引用的麻烦:
1. 确认项目目标框架与NuGet包版本匹配
首先检查你的Android项目目标框架是否确实是monoandroid9.0:
- 右键Android项目 → 属性 → 应用 → 目标框架,确保选择的是monoandroid9.0
- 同时确认你安装的Microsoft.Identity.Client版本包含monoandroid90的平台资产(可以在NuGet包详情页的"依赖项"里查看支持的目标框架)
2. 修改项目文件强制指定平台资产
手动编辑Android项目的.csproj文件,通过AssetTargetFallback或RuntimeIdentifier明确告诉NuGet优先选择monoandroid90的资产:
方法A:添加AssetTargetFallback
在PackageReference节点中添加该属性:
<PackageReference Include="Microsoft.Identity.Client"> <Version>你的包版本号</Version> <AssetTargetFallback>monoandroid90</AssetTargetFallback> </PackageReference>
方法B:指定RuntimeIdentifier
在项目的PropertyGroup里添加:
<PropertyGroup> <!-- 其他现有属性 --> <RuntimeIdentifier>monoandroid90</RuntimeIdentifier> </PropertyGroup>
3. 清理NuGet缓存并重新还原
缓存的旧资产可能导致NuGet选择错误,执行以下命令清理缓存:
nuget locals all -clear
之后回到Visual Studio,右键解决方案 → 选择"还原NuGet包",让NuGet重新下载并选择正确的平台资产。
4. 精确控制NuGet资产包含规则
如果上述方法还不行,可以通过IncludeAssets和ExcludeAssets更精细地控制要加载的资产类型,确保平台特定的运行时库被选中:
<PackageReference Include="Microsoft.Identity.Client"> <Version>你的包版本号</Version> <ExcludeAssets>all</ExcludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
为什么会出现这个问题?
Xamarin项目默认会优先选择.NET Standard版本的NuGet库(如果包提供的话),但像Microsoft.Identity.Client这类依赖平台特定API(比如Android的OnActivityResult)的包,必须加载对应monoandroid90的版本才能获取到这些专属逻辑。通过上面的配置,可以强制NuGet跳过标准库,优先选择Android平台特定的程序集。
内容的提问来源于stack exchange,提问作者Toine db
相关产品推荐
相关产品推荐

