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

Xamarin.Forms Android项目升级NuGet后Cecil程序集解析错误如何解决

问题根因

这个错误是Xamarin.AndroidX迁移工具内置的Mono.Cecil组件的版本匹配规则导致的,和NuGet的依赖解析逻辑无关:

  • 你的BaseClasses包编译时引用的是1.0.63版本的Tools,因此其dll的程序集清单中硬编码了对My.App.Tools Version=1.0.63.0的强引用
  • NuGet的版本浮动规则只会处理包的下载和项目层面的引用优先级,你项目中最终引用1.0.64版本的Tools是符合NuGet规则的,但Mono.Cecil的默认程序集解析器不会读取NuGet的依赖解析结果,只会严格匹配程序集清单中标注的版本号,找不到1.0.63版本的dll就会直接抛出解析失败错误
  • 从构建日志也可以看到,错误刚好发生在_AndroidXCecilfy任务执行阶段,验证了是Cecil解析导致的问题
无需修改BaseClasses包的解决方案

方案1:添加程序集绑定重定向

在Android项目根目录新增/修改App.config文件,添加如下配置,强制将所有版本的Tools程序集指向当前使用的1.0.64版本:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="My.App.Tools" publicKeyToken="null" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.64.0" newVersion="1.0.64.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

修改后清理项目缓存重新编译即可,绝大多数场景下该方案可直接解决问题。

方案2:禁用AndroidX Cecil迁移任务

如果你的项目已经完成AndroidX全量迁移,不存在任何旧Android Support库的引用,可直接禁用导致问题的Cecil迁移任务:
在Android项目的.csproj文件的第一个<PropertyGroup>节点中添加如下配置:

<AndroidXSkipCecilfy>true</AndroidXSkipCecilfy>

该方案会跳过Cecil的程序集扫描修改步骤,自然不会触发版本解析错误。

方案3:临时兼容方案

如果上述方案都不生效,可在项目的预生成事件中,将1.0.64版本的Tools dll复制一份,重命名为匹配1.0.63版本的文件名,供Cecil解析时读取,该方案仅做应急使用,不推荐长期使用。

内容的提问来源于stack exchange,提问作者stealthjong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:27:04