【问题标题】:Xamarin.Forms Getting Mono.Linker.MarkException: Error processing method when compiling in release modeXamarin.Forms 获取 Mono.Linker.MarkException:在发布模式下编译时出错的处理方法
【发布时间】:2018-05-18 16:52:10
【问题描述】:

我有一个在 Windows 上使用 VS2017 (15.7.1) 的 Xamarin.Forms (2.5.1.527436) 应用程序。 android 项目在调试下构建并运行良好。但是,当我在 release 下构建时,出现以下错误:

严重性代码描述项目文件行抑制状态 错误“LinkAssemblies”任务意外失败。 Mono.Linker.MarkException: 错误处理方法: 'System.Void Xamarin.Forms.Pages.BaseDataSource/d__22::MoveNext()' in assembly: 'Xamarin.Forms.Pages.dll' ---> Mono.Cecil.ResolutionException : 无法解析 System.Void Xamarin.Forms.Log::Warning(System.String,System.String) 在 Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference 参考) 在 Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference 参考) 在 Mono.Linker.Steps.MarkStep.MarkInstruction(指令指令) 在 Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody 主体) 在 Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition 方法) 在 Mono.Linker.Steps.MarkStep.ProcessQueue() --- 内部异常堆栈跟踪结束 --- 在 Mono.Linker.Steps.MarkStep.ProcessQueue() 在 Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue() 在 Mono.Linker.Steps.MarkStep.Process() 在 Mono.Linker.Steps.MarkStep.Process(LinkContext 上下文) 在 Mono.Linker.Pipeline.Process(LinkContext 上下文) 在 MonoDroid.Tuner.Linker.Process(LinkerOptions 选项,ILogger 记录器,LinkContext& 上下文) 在 Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res) 在 Xamarin.Android.Tasks.LinkAssemblies.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() IRMobile.Android C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets 1812

我正在链接“仅 Sdk 程序集”,最低 android 版本为 5.1(22 级),目标 Android 版本为 8.1(27 级)

有什么想法吗?

【问题讨论】:

  • 请参考this
  • 感谢@JoeLv-MSFT 的链接。这使我朝着正确的方向前进。我发现我的问题是一个不必要的 NuGet 包,它显然正在加载相同的程序集。再次感谢!

标签: android xamarin.forms xamarin.android linker


【解决方案1】:

就我而言,经过大量研究后,我只是

  • 升级了一些 nuget 包,在 Forms、Android 和 iOS 3 个项目中,这解决了发布模式下的问题。

  • 另外更改 Linking to None 解决了这个问题而不升级包,但我认为不建议这样做。

【讨论】:

    【解决方案2】:

    因此,将链接更改为无并确保所有 Nuget 包都已更新对我来说不起作用。就我而言,我的 android 项目经过近一年的调整和更改,添加和删除了 nuget 包。因此,我的解决方案中有大量不需要的 Android 特定 nuget 包。要确定我可以删除的内容,

    1. 我为 Android 创建了一个全新的 Xamarin 表单项目。
    2. 我从原始解决方案中添加了所有非 Android 特定的 Nuget 包。
    3. 我确保新解决方案在调试和发布模式下编译。
    4. 我回到原来的解决方案并删除了所有存在于该真正解决方案中但不在我的全新解决方案中的 Nuget 包。

    我唯一需要更改的代码是关于我的启动画面。在我的初始屏幕活动中,我有以下内容

    using Android.Support.V7.App;
    public class SplashActivity : AppCompatActivity
    

    当我删除对 Android.Support.V7.App 库的引用时,找不到 AppCompatActivity。为了解决这个问题,我简单地添加了以下 using 语句:

    using AndroidX.AppCompat.App;
    

    一旦我完成了所有这些,应用程序将在发布模式下编译(仍然将链接设置为无)并运行良好。

    这只是另一种选择,以防其他解决方案最终对您不起作用。

    【讨论】:

      【解决方案3】:

      我通过将 Xamarin.Forms 更新到最新的稳定版 (v5.0.0.2196) 解决了这个问题。 正如我所观察到的,当我更新 Xamarin.Forms 时,它还会安装正确版本的依赖项。这包括解决我的问题的正确版本的 Xamarin.AndroidX.RecyclerView。

      【讨论】:

        【解决方案4】:

        我能够通过在共享项目以及 android 和 iOS 项目中删除 plugin.InAppBilling nuget 包来解决此问题。然后我删除了所有项目的 bin 和 obj 文件夹。之后我重建并瞧!不用担心插件,因为您稍后会在发布后添加它。

        【讨论】:

          【解决方案5】:

          就我而言,发生此错误是因为 Android 项目安装了不同版本的 Xamarin.Forms NuGet 包。当我为所有 Xamarin 项目安装相同版本时,问题就解决了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-10-31
            • 2022-10-08
            • 2020-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-14
            相关资源
            最近更新 更多