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

C# System.Runtime.CompilerServices.Unsafe在Xamarin表单中产生意外行为,c#,android,xamarin.forms,release,C#,Android,Xamarin.forms,Release,我从应用程序中构建了一个完整的Xamarin。当我将构建模式更改为Release时,我收到以下错误消息: 严重性代码说明项目文件行抑制状态 错误“链接程序集”任务意外失败。 Mono.Linker.MarkException:错误处理方法:“System.Void” Microsoft.Extensions.Primitives.InplaceStringBuilder::Append(System.String,System.Int32,System.Int32)' 在程序集中:“Micros

我从应用程序中构建了一个完整的Xamarin。当我将构建模式更改为
Release
时,我收到以下错误消息:

严重性代码说明项目文件行抑制状态 错误“链接程序集”任务意外失败。 Mono.Linker.MarkException:错误处理方法:“System.Void” Microsoft.Extensions.Primitives.InplaceStringBuilder::Append(System.String,System.Int32,System.Int32)' 在程序集中:“Microsoft.Extensions.Primitives.dll”--> Mono.Cecil.ResolutionException:无法解析系统。无效 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(链接上下文) MonoDroid.Tuner.Linker.Process(LinkerOptions选项,LinkContext& (上下文)在 Xamarin.Android.Tasks.LinkAssembly.Execute(DirectorySassemblyResolver res)位于Xamarin.Android.Tasks.LinkAssemblies.Execute()处 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ItaskeExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.d_u26.MoveNext()EClinicForDoctor.Android

在互联网上搜索后,我发现如下内容:

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

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


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

我现在看到此问题在几个不同的位置弹出。这里有一些讨论:

本期Github还列出了一些(可能的)解决方案,其中反馈最积极的是:

这里有一个有效的解决办法。它既简陋又丑陋,但与 小题大做。把它放在一个XML文件中,然后
放在你的Android系统中 csproj文件在末尾。它至少对系统缓冲区有效


另一个使用了上面的XML并表示:

  • 我刚刚从上面的链接复制了内容,并将其保存为Android项目文件夹中的
    UnsafeFix.xml
    文件
  • 然后刚刚添加:
    在android.csproj文件的末尾,就在前面
  • 清除了所有内容,重新编译,终于成功了
    最后我得到了解决方案。@Gerald Versluis提供的中的一条评论解决了这个问题:

    我遵循洪力玉2002的这些步骤

  • 转到C:\Users%user%.nuget\system.runtime.compilerservices.unsafe\4.4.0,然后 删除“ref”文件夹,然后复制“lib”文件夹并重命名 复制回“ref”
  • 清理项目中的所有“bin”和“obj”文件夹
  • 重建并运行
  • 这个简单的解决方法,对我有效:)我当前的版本是 Xamarin.表格2.5.1.444934


    谢谢你的回答,但是这个解决方案不起作用。它给出了一个错误列表,上面写着:
    文件“obj\Release\linksrc\..dll”不存在。
    我给你+1作为答案,因为链接实际上包含解决方案。谢谢:)
    <!-- 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>