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

Xamarin项目Android端加载PDF时出现Xamarin.iOS程序集加载失败问题

问题分析

错误的核心原因是你的代码在Android环境下执行了iOS专属API:NSBundle.MainBundle.BundlePath是iOS平台特有的API,当Android应用运行这段代码时,会尝试加载Xamarin.iOS程序集,但Android项目本就不应该依赖这个程序集,因此抛出找不到文件的异常。

解决方案
  1. 拆分平台专属的路径获取逻辑
    将文件路径的获取代码放到对应的平台判断分支里,避免Android端执行iOS的API:

    string localDocUrl;
    // iOS端路径处理
    if (Device.RuntimePlatform == Device.iOS)
    {
        localDocUrl = Path.Combine(NSBundle.MainBundle.BundlePath, uri);
        // 执行iOS原生阅读器逻辑
    }
    // Android端路径处理
    else if (Device.RuntimePlatform == Device.Android)
    {
        // Android端获取文件路径,示例:若PDF放在Assets文件夹(需设置为AndroidAsset),可先复制到可访问路径
        // 这里以私有存储路径为例,根据你的实际文件位置调整
        localDocUrl = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), uri);
        
        RadaeePDFManager radaee = new RadaeePDFManager();
        Context cont = Android.App.Application.Context;
        radaee.Show(cont, localDocUrl, "");
    }
    
  2. 移除不必要的依赖
    从Android项目和共享项目中移除Xamarin.iOS的依赖项——Android项目完全不需要这个程序集,保留它只会引发冲突。

  3. 清理并重新生成解决方案

    • 右键解决方案 → 清理解决方案
    • 右键Android项目 → 重新生成
    • 确认Android项目的引用列表中没有Xamarin.iOS相关条目
额外建议

对于跨平台项目的平台专属逻辑,更规范的做法是使用Xamarin的DependencyService:将路径获取、PDF打开等平台特定逻辑封装到各自平台的实现类中,共享项目只调用统一接口,避免在共享代码中直接写平台判断和专属API,减少此类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:05:08