C# System.Runtime.CompilerServices.Unsafe在Xamarin表单中产生意外行为
我从应用程序中构建了一个完整的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
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并表示:
UnsafeFix.xml
文件
在android.csproj文件的末尾,就在前面最后我得到了解决方案。@Gerald Versluis提供的中的一条评论解决了这个问题: 我遵循洪力玉2002的这些步骤
谢谢你的回答,但是这个解决方案不起作用。它给出了一个错误列表,上面写着:
文件“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>