Xamarin项目Android端加载PDF时出现Xamarin.iOS程序集加载失败问题
问题分析
错误的核心原因是你的代码在Android环境下执行了iOS专属API:NSBundle.MainBundle.BundlePath是iOS平台特有的API,当Android应用运行这段代码时,会尝试加载Xamarin.iOS程序集,但Android项目本就不应该依赖这个程序集,因此抛出找不到文件的异常。
解决方案
拆分平台专属的路径获取逻辑
将文件路径的获取代码放到对应的平台判断分支里,避免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, ""); }移除不必要的依赖
从Android项目和共享项目中移除Xamarin.iOS的依赖项——Android项目完全不需要这个程序集,保留它只会引发冲突。清理并重新生成解决方案
- 右键解决方案 → 清理解决方案
- 右键Android项目 → 重新生成
- 确认Android项目的引用列表中没有Xamarin.iOS相关条目
额外建议
对于跨平台项目的平台专属逻辑,更规范的做法是使用Xamarin的DependencyService:将路径获取、PDF打开等平台特定逻辑封装到各自平台的实现类中,共享项目只调用统一接口,避免在共享代码中直接写平台判断和专属API,减少此类错误。
内容的提问来源于stack exchange,提问作者Lorem
相关产品推荐
相关产品推荐

