You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:42:25