更新Nuget导致未处理的异常:System.TypeLoadException

Joe*_*oey 7 xamarin.android nuget-package xamarin xamarin.forms visual-studio-2017

我正在启动一个新的xamarin主页面以进行测试,并更新了xamarin.android.support和xamarin.forms版本的nuget包。然后,我的程序得到异常:

LoadApplication获取异常错误:

    base.OnCreate(savedInstanceState);
    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    LoadApplication(new App());


Unhandled Exception:

System.TypeLoadException: Could not load type of field 'Xamarin.Forms.Platform.Android.RendererPool:_freeRenderers' (0) due to: Could not resolve type with token 01000275 from typeref (expected class 'System.Collections.Generic.Stack`1' in assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e') assembly:mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e type:System.Collections.Generic.Stack`1 member:(null) occurred
Run Code Online (Sandbox Code Playgroud)

小智 9

在所有项目中将xamarin.forms和xamarin.forms.maps降级到v4.1.0.778454。

我做到了,并且表现出色


mag*_*981 5

该问题已在 github进行跟踪,并且该问题仅触发 Visual Studio 2017 用户。如果使用 Visual Studio 2019 编译应用程序,应用程序在Xamarin.Forms 4.2.0.815419 (4.2.0 Service Release 2) 中运行良好。

这是由Mono 更改引起的,该更改使其成为 VS2019 中的 Xamarin.Android

System.Collections.Generic.Queue 在

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v1.0\System.dll
Run Code Online (Sandbox Code Playgroud)

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v1.0\mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

它不可用

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v1.0\mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

所以如果任何依赖Queue的dll符合VS2019,并且在VS2017上运行,都会抛出异常cannot load Queue from mscorlib。

Xamarin.Forms 团队现在尝试在 XF 代码中内部实现堆栈和队列实现 VS 2017 兼容性

在合并之前,最后一个 Xamarin.Forms 位是用 VS2017 编译的,并且在 VS2017 上工作得很好。