我构建了完整的Xamarin From应用程序。当我将构建模式更改为Release时,出现以下错误消息:


  严重性代码说明项目文件行抑制状态
  错误“ LinkAssemblies”任务意外失败。
  Mono.Linker.MarkException:错误处理方法:'System.Void
  Microsoft.Extensions.Primitives.InplaceStringBuilder :: Append(System.String,System.Int32,System.Int32)'
  在汇编中:'Microsoft.Extensions.Primitives.dll'--->
  Mono.Cecil.ResolutionException:无法解析System.Void
  System.Runtime.CompilerServices.Unsafe :: CopyBlockUnaligned(System.Void *,System.Void *,System.UInt32)
  在Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference
  参考),位于Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference
  参考)
  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.ProcessEntireQueue()在
  的Mono.Linker.Steps.MarkStep.Process()
  Mono.Linker.Steps.MarkStep.Process(LinkContext上下文)位于
  Mono.Linker.Pipeline.Process(LinkContext上下文)位于
  MonoDroid.Tuner.Linker.Process(LinkerOptions选项,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()EClinicForDoctor.Android


在Internet上搜索后,我发现此solution表示:

解决此问题的方法是确保您具有最新支持的Android SDK版本,并将“目标框架”设置为“使用最新安装的平台”。还建议您将“目标Android版本”设置为“使用目标框架版本”,并将最低Android版本设置为API 15或更高版本。这被视为受支持的配置。

因此,我更新了Android SDK,设置了目标框架并将最低Android版本设置为API 15。

c# - System.Runtime.CompilerServices.Unsafe在Xamarin表单中产生意外行为-LMLPHP
c# - System.Runtime.CompilerServices.Unsafe在Xamarin表单中产生意外行为-LMLPHP
c# - System.Runtime.CompilerServices.Unsafe在Xamarin表单中产生意外行为-LMLPHP

但是,我仍然遇到相同的错误。另一个解决方案说我应该更新NuGet软件包。我发现软件包System.Runtime.CompilerServices.Unsafe的版本为4.3.0,并且此软件包有更新。更新软件包时,该错误不再出现,但是出现了另一个问题。部署应用程序后,它会运行并停止,没有任何错误消息。移动设备只是退出应用程序而没有显示任何错误消息。当软件包System.Runtime.CompilerServices.Unsafe的版本高于4.3.0时,会发生这种情况。我试图删除软件包,并且再次发生相同的问题。我怎么解决这个问题?

最佳答案

我现在已经在几个不同的位置看到了此问题的弹出窗口。这里有一些讨论,例如:https://github.com/xamarin/xamarin-android/issues/1196

这个Github问题也列出了一些(可能的)解决方案,得到最积极反馈的一个似乎是这样的:


  这是一个可行的解决方法。它很笨拙,但可以使用
  最小的麻烦。将其放在XML文件中,然后在您的Android中<Import>
  csproj文件结尾。它至少适用于System.Buffers


<!-- Workaround for https://github.com/xamarin/xamarin-android/issues/1162 -->
<Project>
  <Target Name="ReplaceRefAssemblies" AfterTargets="_ResolveAssemblies">
    <ItemGroup>
      <ResolvedAssembliesFixedWindows Include="@(ResolvedAssemblies->Replace('\ref\','\lib\'))" />
      <ResolvedAssembliesFixedUnix Include="@(ResolvedAssemblies->Replace('/ref/','/lib/'))" />
      <ResolvedAssembliesFixed Include="@(ResolvedAssembliesFixedWindows)" Condition="@(ResolvedAssembliesFixedWindows) != @(ResolvedAssemblies)" />
      <ResolvedAssembliesFixed Include="@(ResolvedAssembliesFixedUnix)" Condition="@(ResolvedAssembliesFixedUnix) != @(ResolvedAssemblies)" />
      <ResolvedAssemblies Remove="@(ResolvedAssemblies)" />
      <ResolvedAssemblies Include="@(ResolvedAssembliesFixed)" />
    </ItemGroup>
  </Target>
</Project>


另一个使用上面的XML并说:


  
  我刚刚从上面的链接复制了内容,并将其另存为UnsafeFix.xml文件在Android项目文件夹中。
  然后刚刚添加:<Import Project="UnsafeFix.xml" />在android .csproj文件的末尾,就在
  清除所有内容,重新编译,终于成功了!

10-02 01:29