首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Runtime.CompilerServices.Unsafe以Xamarin形式产生意外行为

System.Runtime.CompilerServices.Unsafe以Xamarin形式产生意外行为
EN

Stack Overflow用户
提问于 2018-04-09 11:06:01
回答 2查看 1.5K关注 0票数 3

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

严重性代码描述项目文件行抑制状态错误"LinkAssemblies“任务意外失败。错误处理方法:程序集中的“Microsoft.Extensions.Primitives.InplaceStringBuilder::Append(System.String,System.Int32,System.Int32”:“Microsoft.Extensions.Primitives.dll”( Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference参考)在Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference参考)(在Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction指令下) (在Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body) at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition方法) 在Mono.Linker.Steps.MarkStep.ProcessEntireQueue()的Mono.Linker.Steps.MarkStep.ProcessQueue() -内部异常堆栈跟踪的末尾-在Mono.Linker.Steps.MarkStep.ProcessQueue() at Mono.Linker.Steps.MarkStep.Process() at Mono.Linker.Steps.MarkStep.Process() at Mono.Linker.Pipeline.Process(LinkContext context) at MonoDroid.Tuner.Linker.Process(LinkerOptions options ),LinkContext& context)在Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)在Xamarin.Android.Tasks.LinkAssemblies.Execute() at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() EClinicForDoctor.Android

在网上搜索后,我发现这个解决方案上写着:

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 10:19:06

我终于找到解决办法了。@Gerald提供的问题中的一个评论解决了这个问题:

我遵循hongliyu2002 https://forums.realm.io/t/could-not-load-assembly-system-runtime-compilerservices-unsafe-during-startup-registration/974/4的以下步骤

  1. 转到C:\Users%user%.nuget\system.runtime.compilerservices.unsafe\4.4.0,并删除"ref“文件夹,然后复制"lib”文件夹并将副本重命名为"ref“。
  2. 清理项目中的所有"bin“和"obj”文件夹。
  3. 重建和运行..。

这个简单的解决方法,适用于我:)我的当前版本是Xamarin.Forms 2.5.1.444934

票数 1
EN

Stack Overflow用户

发布于 2018-04-09 11:17:04

我已经看到这个问题出现在几个不同的地方。有一些讨论围绕在这里:https://github.com/xamarin/xamarin-android/issues/1196

这个Github问题还列出了一些(可能的)解决方案,其中最有积极反馈的似乎就是这个:

这是一个有效的解决办法。这是讨厌和丑陋,但工作与最低限度的小题大做。将其放入XML文件,并在最后将其放入Android文件中。它至少适用于System.Buffers

代码语言:javascript
复制
<!-- 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并说:

  1. 我刚刚从上面的链接中复制了内容,并作为UnsafeFix.xml文件保存在Android项目文件夹中。
  2. 然后刚刚添加:<Import Project="UnsafeFix.xml" />在android .csproj文件的末尾,就在前面
  3. 清除一切,重新编译,它终于起作用了!
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49731480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档