Xamarin.Forms获取Mono.Linker.MarkException:在发布模式下编译时出错处理方法

时间:2018-05-18 16:52:10

标签: android xamarin.forms xamarin.android linker

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

  

严重级代码描述项目文件行抑制状态       错误“LinkAssemblies”任务意外失败。       Mono.Linker.MarkException:错误处理方法:汇编中的'System.Void Xamarin.Forms.Pages.BaseDataSource / d__22 :: MoveNext()':'Xamarin.Forms.Pages.dll'---> Mono.Cecil.ResolutionException:无法解析System.Void Xamarin.Forms.Log :: Warning(System.String,System.String)          at Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference)          在Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference)          在Mono.Linker.Steps.MarkStep.MarkInstruction(指令说明)          在Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)          在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 context)          在Mono.Linker.Pipeline.Process(LinkContext context)          在MonoDroid.Tuner.Linker.Process(LinkerOptions选项,ILogger记录器,LinkContext& context)          在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 Assemblies”,最低安卓版本为5.1(等级22),目标Android版本为8.1(等级27)

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

经过一番研究,我只是

  • 在三个项目Forms(Android和iOS)中升级了一些nuget程序包,这已解决了发行模式下的问题。

OR

  • 也可以更改链接为无来解决该问题,而无需升级软件包,但我认为不建议这样做。

答案 1 :(得分: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;

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

这只是另一种选择,以防其他解决方案最终不适合您。