归档Xamarin应用时无法找到Mono.Android程序集的问题咨询
Xamarin项目归档iOS时Mono.Android引用错误问题解答
问题1:Mono.Android程序集的存放位置
Mac系统下,Mono.Android程序集主要存在两个核心位置:
- Xamarin.Android框架安装目录:
例如针对Android 9.0(API28),路径可能为:/Library/Frameworks/Xamarin.Android.framework/Versions/{XAMARIN_ANDROID_VERSION}/lib/xbuild-frameworks/MonoAndroid/{API_LEVEL}/Mono.Android.dll/Library/Frameworks/Xamarin.Android.framework/Versions/10.1.1.3/lib/xbuild-frameworks/MonoAndroid/v9.0/Mono.Android.dll - Android SDK平台目录:
~/Library/Developer/Xamarin/android-sdk-macosx/platforms/android-28/Mono.Android.dll
问题2:归档iOS项目触发Android程序集错误的原因
出现这种跨平台引用错误的常见原因:
- iOS项目间接引用了Android专属代码:共享项目/NetStandard库中未做平台隔离,导致iOS构建时加载了Android的API引用
- iOS项目的
.csproj文件被篡改:意外添加了<Reference Include="Mono.Android"的引用项 - 归档配置异常:iOS归档任务错误关联了Android项目的构建目标,导致构建流程尝试加载Android程序集
- NuGet包依赖污染:iOS项目安装的某个NuGet包间接依赖了Mono.Android组件
问题3:解决方案及版本显示0.0.0.0的处理
关于版本显示0.0.0.0的原因
这是VS for Mac无法正确识别程序集版本的表现,通常是引用路径错误、Xamarin.Android版本与项目目标API不匹配,或者程序集文件损坏导致的。
具体解决步骤
清理iOS项目的错误引用
打开iOS项目的.csproj文件,搜索<Reference Include="Mono.Android",如果找到直接删除该引用节点,保存后重新加载项目。隔离共享代码的Android依赖
检查共享项目/NetStandard库中的代码,确保Android专属命名空间(如Android.App、Android.Widget)被条件编译包裹:#if __ANDROID__ // Android专属代码 #endif修复Xamarin.Android安装
- 打开VS for Mac的「工具」-「SDK管理器」,确认Android 9.0(API28)的所有组件已完整安装,包括对应版本的Xamarin.Android框架(API28对应Xamarin.Android 10.x系列)
- 若怀疑组件损坏,可卸载后重新安装Xamarin.Android组件
手动修正Android项目的引用路径
删除Android项目中现有的Mono.Android引用,手动编辑.csproj文件,添加正确的路径引用:<Reference Include="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065"> <HintPath>/Library/Frameworks/Xamarin.Android.framework/Versions/10.1.1.3/lib/xbuild-frameworks/MonoAndroid/v9.0/Mono.Android.dll</HintPath> </Reference>保存后重新加载项目,版本信息会自动识别。
清理缓存并重建
- 删除解决方案下所有
bin、obj目录,清除构建缓存 - 先单独构建Android项目确保无错误,再构建iOS项目,最后尝试归档
- 删除解决方案下所有
检查NuGet包依赖
查看iOS项目的NuGet包列表,排查是否存在依赖Mono.Android的包,如有则更新为跨平台兼容版本或替换为替代包
内容的提问来源于stack exchange,提问作者Cole Perry
相关产品推荐
相关产品推荐

