【问题标题】:System.Runtime.CompilerServices.Unsafe produce unexpected behavior in Xamarin FormsSystem.Runtime.CompilerServices.Unsafe 在 Xamarin 窗体中产生意外行为
【发布时间】:2023-03-13 03:35:01
【问题描述】:

我构建了一个完整的 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 context) 在 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

在网上搜索后,我找到了这个solution,上面写着:

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

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

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

【问题讨论】:

    标签: c# android xamarin.forms release


    【解决方案1】:

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

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

    这是一个有效的解决方法。它既丑陋又丑陋,但适用于 最小的麻烦。把它放在一个 XML 文件中,然后 <Import> 它在你的 Android 中 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 并说:

    1. 我刚刚从上面的链接中复制了内容并保存为Android项目文件夹中的UnsafeFix.xml文件。
    2. 然后刚刚添加:&lt;Import Project="UnsafeFix.xml" /&gt; 在 android .csproj 文件的末尾,就在
    3. 之前
    4. 清空一切,重新编译,终于成功了!

    【讨论】:

    • 感谢您的回答,但该解决方案不起作用。它给出了一个错误列表,上面写着:The file "obj\Release\linksrc\....dll" does not exist.
    • 我给你的答案 +1 因为链接实际上包含解决方案。谢谢:)
    【解决方案2】:

    我终于得到了解决方案。 @Gerald Versluis 提供的issue 中的一个cmets 解决了这个问题:

    我按照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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多