更新Firebase.Messaging.Service NuGet后Xamarin Android构建失败:无法解析DrawableWrapper
解决Xamarin Android更新Firebase.Messaging.Service后XALNK7000构建错误
问题场景
更新Xamarin Android项目的Firebase.Messaging.Service NuGet包后,出现XALNK7000链接错误,使用Visual Studio 2022 17.5.4,目标Android 13,构建日志如下:
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: Mono.Linker.MarkException: Error processing method: 'System.Void Xamarin.Forms.Platform.Android.ShellSearchView/ClipDrawableWrapper::.ctor(Android.Graphics.Drawables.Drawable)' in assembly: 'Xamarin.Forms.Platform.Android.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve AndroidX.AppCompat.Graphics.Drawable.DrawableWrapper 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.HandleUnresolvedType(TypeReference reference) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessQueue() 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: --- End of inner exception stack trace --- 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessQueue() 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue() 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.Process() 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.Process(LinkContext context) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Mono.Linker.Pipeline.Process(LinkContext context) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res) 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Xamarin.Android.Tasks.LinkAssemblies.RunTask() 5>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(649,5): error XALNK7000: at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17 ========== Rebuild All: 4 succeeded, 1 failed, 0 skipped ==========
错误原因
更新Firebase.Messaging.Service后,引入的AndroidX依赖版本与现有Xamarin.Forms依赖的AndroidX.AppCompat版本不兼容,导致链接器无法找到AndroidX.AppCompat.Graphics.Drawable.DrawableWrapper类型。
解决方案
- 更新Xamarin.Forms到兼容版本:打开NuGet包管理器,将Xamarin.Forms更新至支持Android 13的最新稳定版,确保所有项目(包括共享项目和Android项目)的Xamarin.Forms版本一致。
- 统一AndroidX依赖版本:检查项目中所有AndroidX相关NuGet包(尤其是AndroidX.AppCompat),将它们更新到相同的稳定版本,避免版本冲突。
- 调整链接器行为(临时方案):右键Android项目 → 属性 → Android选项 → 链接器设置,将链接行为改为
Sdk程序集仅或不链接,重新构建项目(注意:此方案会增大APK体积,仅作临时测试,最终需解决依赖问题)。 - 清理重建项目:执行
生成→清理解决方案,删除项目目录下的bin和obj文件夹,再重新生成解决方案。
内容的提问来源于stack exchange,提问作者Siddhant maurya
相关产品推荐
相关产品推荐

