在Xamarin中运行.Net Standard项目时的System.Runtime.CompilerServices.Unsafe

时间:2018-04-06 06:53:53

标签: android xamarin realm .net-standard-2.0

我正在使用.Net Standard在xamarin创建一个应用程序到目前为止,我已经在我的解决方案中安装了以下Nuget包

PCL / .Net标准包

enter image description here

Android软件包

enter image description here

最低SDK级别为Android 5.1,最高为Android Oreo 8.1

当我在visual studio VS2017中运行应用程序时,它会运行几秒钟并突然关闭并抛出以下错误

04-06 02:45:11.182 6262-6262/com.org.sam A/monodroid-assembly: Could not load assembly 'System.Runtime.CompilerServices.Unsafe' during startup registration.
04-06 02:45:11.182 6262-6262/com.org.sam A/monodroid-assembly: This might be due to an invalid debug installation.
04-06 02:45:11.182 6262-6262/com.org.sam A/monodroid-assembly: A common cause is to 'adb install' the app directly instead of doing from the IDE. 
  1. 我尝试多次清理解决方案并删除bin和obj文件夹,但我收到同样的错误。

  2. 我没有在任何地方编写任何代码,因为我只是迁移项目所以这个项目是空白的。

  3. 我个人认为RealmSystem.Runtime.CompilerServices引用,因此会产生问题。这是从nuget

    安装领域的屏幕截图

    enter image description here

2 个答案:

答案 0 :(得分:1)

我也有这个错误,但是当从.net标准库使用Entity Framework时。这需要很长时间才能解决!希望这对你有用。

在android项目中,将以下内容添加为XmlFile,例如(UnsafeCompilerWorkaround.xml):

<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>

编辑android.csproj文件并添加以下导入

  <Import Project="UnsafeCompilerWorkaround.xml"></Import>

然后清理并重建解决方案。

答案 1 :(得分:0)

这是Xamarin.Android中的已知问题。据我所知,目前唯一已知的解决方法是在packages.config引用时使用<PackageReference>而不是NuGet

它应该很快被#1356修复,希望这可以帮到你。 :)