从Java.Interop.dll引用的以下程序集无法加载System.Runtime 4.0.0.0?

时间:2016-10-29 03:05:33

标签: android xamarin xamarin.android

我的项目正处于测试阶段,我已经在所有模拟器上尝试了它,在一个物理设备上调试OK但在另一个物理设备上输出窗口中打印了以下消息,但是失败了:

10-29 09:43:18.376 W/Mono    (16624): The following assembly referenced from Java.Interop.dll could not be loaded:
10-29 09:43:18.376 W/Mono    (16624):      Assembly:   System.Runtime    (assemblyref_index=1)
10-29 09:43:18.376 W/Mono    (16624):      Version:    4.0.0.0
10-29 09:43:18.376 W/Mono    (16624):      Public Key: b03f5f7f11d50a3a
10-29 09:43:18.376 W/Mono    (16624): The assembly was not found in the Global Assembly Cache, a path listed in the MONO_PATH environment variable, or in the location of the executing assembly (/).
10-29 09:43:18.376 D/Mono    (16624): Failed to load assembly Java.Interop[0x6c0a0040]
10-29 09:43:18.376 W/Mono    (16624): Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
10-29 09:43:18.376 E/mono-rt (16624): Stacktrace:
10-29 09:43:18.376 E/mono-rt (16624): 
10-29 09:43:18.376 E/mono-rt (16624): 
10-29 09:43:18.376 E/mono-rt (16624): Attempting native Android stacktrace:
10-29 09:43:18.376 E/mono-rt (16624): 
10-29 09:43:18.385 E/mono-rt (16624):  at ???+0 [0x63ee7667]
10-29 09:43:18.386 E/mono-rt (16624):  at mono_class_get_field_from_name+31 [0x63ee773f]
10-29 09:43:18.387 E/mono-rt (16624):  at ???+31 [0x7355c91b]
10-29 09:43:18.387 E/mono-rt (16624):  at ???+31 [0x7355cb5c]
10-29 09:43:18.387 E/mono-rt (16624):  at Java_mono_android_Runtime_init+2099 [0x7355efbb]
10-29 09:43:18.387 E/mono-rt (16624):  at ???+2099 [0x64783962]
10-29 09:43:18.388 E/mono-rt (16624): 
10-29 09:43:18.388 E/mono-rt (16624): =================================================================
10-29 09:43:18.388 E/mono-rt (16624): Got a SIGSEGV while executing native code. This usually indicates
10-29 09:43:18.388 E/mono-rt (16624): a fatal error in the mono runtime or one of the native libraries 
10-29 09:43:18.388 E/mono-rt (16624): used by your application.
10-29 09:43:18.388 E/mono-rt (16624): =================================================================    

问题肯定不在我的代码中(执行没有机会在我的代码中的任何地方跳转,并且代码在运行Kitkat 4.4的另一个物理设备中正常工作)。我正在测试的设备运行Lollipop 5.0(因此API肯定会支持Kitkat支持的功能)。

我没有尝试创建已签名的APK并在设备上安装最终版本,但应首先进行调试。我也不确定这是否与ADB接口驱动程序失败的问题有关? (虽然设备似乎连接正常,其名称显示在Visual Studio中)。

我已经尝试谷歌搜索这个问题,但没有找到任何结果(只有一些结果)。根据消息,看起来应该引用这个System.Runtime? (奇怪的是,我的项目中没有引用它,但它在所有模拟器和一个物理设备中运行良好,同时建筑总是成功的)。我已经尝试在我的项目中找到要添加作为参考的程序集,但也找不到任何合适的程序集(来自参考管理器窗口)。

我希望这里有人能够找出帮助我的错误。我测试的设备可能被选为我们客户的运行设备,这一点非常重要。谢谢你的帮助!

更新

我尝试过多挖掘一下,可以确定ADB接口驱动程序正常工作(某些应用程序可以构建和调试好)。然而,即使 Hello world 应用程序(在Visual Studio中创建新的空白Android项目时自动生成)也无法调试,这非常非常奇怪(与我在上面发布的相同的例外)。所以Xamarin Android在这里显然有问题。

1 个答案:

答案 0 :(得分:2)

我很幸运,通过我的设备调试好的应用程序可以选择 使用快速部署 未选中(所以我只是尝试在我的当前的项目,它的工作):

enter image description here

看起来快速部署选项会使构建过程链接引用不正确(因此导致某些引用的程序集错过了没有明确原因)。

该选项对我的设备不起作用可能部分是因为ADB接口驱动程序。这个驱动程序不是设备制造商的官方驱动程序,它是所有Android设备的某种通用ADB接口驱动程序(它是未签名的,我必须禁用驱动程序签名强制执行才能安装该驱动程序通用驱动程序(以便我可以在我的设备上进行调试)。

我认为这个答案对遇到相同情况的人非常有用:)