升级Visual Studio 16.11.1后Xamarin.Forms编译Android项目报XALNS7028错误
错误
我正在构建一个Xamarin.Form项目,编译Android项目时出现了该错误,讽刺的是这是一个与iOS相关的错误。
问题触发过程
前一天晚上项目运行完全正常,今日早晨我将Visual Studio升级到16.11.1版本后开始编译项目,编译Android项目时触发了该错误,其他项目(例如Forms项目)编译均正常。
已尝试的解决方案
我已在互联网搜索相关解决方案(多数为旧方案,但我均逐一尝试),具体操作如下:
- 重启电脑
- 关闭Visual Studio,删除所有项目下的obj、bin和.vs文件夹后重启Visual Studio
- 清空并重新下载NuGet包后重新编译项目
- 升级Xamarin到最新版本,同时将所有NuGet包更新到最新版
- 通过github拉取前一晚的旧版本项目代码尝试编译
以上所有操作均未解决问题
参考信息
以下是完整的错误日志原文:
Severity Code Description Project File Line Suppression State Error XALNS7028: System.IO.FileNotFoundException: Could not load assembly 'Xamarin.iOS, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'. Perhaps it doesn't exist in the Mono for Android profile? File name: 'Xamarin.iOS.dll' at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) in /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:line 221 at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference) in /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:line 191 at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/cecil/Mono.Cecil/MetadataResolver.cs:line 110 at Mono.Cecil.TypeReference.Resolve() in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/cecil/Mono.Cecil/TypeReference.cs:line 276 at Java.Interop.Tools.Cecil.TypeDefinitionCache.Resolve(TypeReference typeReference) in /Users/builder/azdo/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionCache.cs:line 20 at Java.Interop.Tools.Cecil.TypeDefinitionRocks.<GetTypeAndBaseTypes>d_5.MoveNext() in /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs:line 40 at Java.Interop.Tools.Cecil.TypeDefinitionRocks.IsSubclassOf(TypeDefinition type, String typeName, IMetadataResolver resolver) in /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs:line 94 at MonoDroid.Tuner.FixAbstractMethodsStep.FixAbstractMethodsUnconditional(AssemblyDefinition assembly) at Xamarin.Android.Tasks.LinkAssembliesNoShrink.RunTask() at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17 0
解决方案
根因说明
这是Visual Studio 16.11.1版本的已知兼容性bug,升级后Xamarin Android构建任务逻辑异常,会错误尝试加载iOS相关程序集,和项目本身的代码配置无关。
修复步骤
- 调整链接器配置:打开Android项目属性,进入「Android选项」页面,将链接器的链接行为修改为「链接所有程序集」,重新编译项目。如果该配置会导致业务代码被误裁剪,编译成功后可以切回原本的链接配置,后续编译通常不会再触发该错误。
- 清理Android项目引用:右键Android项目选择「编辑项目文件」,手动删除所有包含
Xamarin.iOS的引用节点,保存后重新加载项目再编译即可。 - 回退Visual Studio版本:如果以上方法都不生效,可将Visual Studio降级到16.10.x稳定版,该版本不存在这个构建bug,可以正常编译Xamarin Android项目,等待微软发布对应修复补丁后再升级即可。
内容的提问来源于stack exchange,提问作者user1034912
相关产品推荐
相关产品推荐

