启动时出现TypeLoadException

时间:2013-09-23 17:29:29

标签: c# xamarin xamarin.android mvvmcross portable-class-library

最近开始使用Xamarin和MvvmCross。繁忙的建筑我的第一个项目。创建了我的.Core项目和ViewModel,在Visual Studio中安装了Nuget包。创建了我的.Droid项目,安装了Nuget包。创建了我的第一个视图,现在尝试运行该应用程序。但是我得到以下例外:

Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'Cirrious.MvvmCross.Binding.Droid'.

Full stacktrace:
W/        ( 1438): Missing method .ctor in assembly /data/data/XamTest.Droid/files/.__override__/Cirrious.MvvmCross.Droid.dll, type System.Runtime.CompilerServices.ExtensionAttribute
W/        ( 1438): Can't find custom attr constructor image: /data/data/XamTest.Droid/files/.__override__/Cirrious.MvvmCross.Droid.dll mtoken: 0x0a000012
Unhandled Exception:

System.TypeLoadException: 
E/mono    ( 1438): 
E/mono    ( 1438): Unhandled Exception:
E/mono    ( 1438): System.TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'Cirrious.MvvmCross.Droid'.
E/mono    ( 1438): at XamTest.Droid.SplashScreen..ctor () [0x00000] in c:\Dev\XamTest\XamTest.Droid\SplashScreen.cs:16
E/mono    ( 1438): at (wrapper dynamic-method) object.38e61b4f-1913-46a5-ba4a-75980457a823 (intptr,object[]) <IL 0x00018, 0x00053>
E/mono    ( 1438): at Java.Interop.TypeManager.n_Activate (intptr,intptr,intptr,intptr,intptr,intptr) [0x0006a] in /Users/builder/data/lanes/monodroid-lion-bigsplash/0e0e51f9/source/monodroid/src/Mono.Android/src/Java.Interop/TypeManager.cs:141
E/mono    ( 1438): at (wrapper native-to-managed) Java.Interop.TypeManager.n_Activate (intptr,intptr,intptr,intptr,intptr,intptr) <IL 0x0001e, 0x000a3>
E/mono    ( 1438): 
I/mono    ( 1438): [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'Cirrious.MvvmCross.Droid'.
I/mono    ( 1438): at XamTest.Droid.SplashScreen..ctor () [0x00000] in c:\Dev\XamTest\XamTest.Droid\SplashScreen.cs:16
I/mono    ( 1438): at (wrapper dynamic-method) object.38e61b4f-1913-46a5-ba4a-75980457a823 (intptr,object[]) <IL 0x00018, 0x00053>
I/mono    ( 1438): at Java.Interop.TypeManager.n_Activate (intptr,intptr,intptr,intptr,intptr,intptr) [0x0006a] in /Users/builder/data/lanes/monodroid-lion-bigsplash/0e0e51f9/source/monodroid/src/Mono.Android/src/Java.Interop/TypeManager.cs:141
I/mono    ( 1438): at (wrapper native-to-managed) Java.Interop.TypeManager.n_Activate (intptr,intptr,intptr,intptr,intptr,intptr) <IL 0x0001e, 0x000a3>
I/mono    ( 1438): 

有什么想法吗?

我需要提一下,当我在Xamarin.Studio中打开我的解决方案时,对Core库的引用显示为错误。

  

( - 不兼容的目标框架(.Net Portable Subset(.Net for Windows Store,.Net Framework 4.5,Silverlight 4,Windows Phone 7.5)。)。

这可能只是另一个问题,与例外无关。

3 个答案:

答案 0 :(得分:1)

当我遇到同样的问题时,这对我有用:

当我更新mvvmCross时,我仍然使用旧版本的Xamarin,它使用旧版monodroid。更新Xamarin(新版本使用monodroid 3)为我解决了这个问题。

希望这有帮助

答案 1 :(得分:0)

问题与我安装的Hot Tuna Starter包的版本有关。我安装了3.0.12版本。

当我更换了Cirrious.MVVM和Cirrious.MVVM.Droid dll位于packages \ MvvmCross.HotTuna.MvvmCrossLibraries.3.0.12 \ lib \ MonoAndroid16时,来自Hot Tuna Starter pack V3.0.9的dll一切正常。 (我也测试了3.0.4也运行良好)

我没有测试V3.0.10和v3.0.11。我也测试了v 3.0.13 BETA,但它仍然被打破了。

答案 2 :(得分:0)

  1. 您是否使用稳定分支机构的Visual Studio 2012和Xamarin最新版本?

  2. 重要:在Visual Studio中,通过转到左侧的“工具”菜单\“扩展和更新\更新”选项卡,确保您拥有最新的NuGet管理器。

  3. 我建议你重新开始一个新的测试项目并完全遵循这些步骤:

    a)创建一个名为MyApp.Droid的新Android应用程序,以及一个新的PCL项目MyApp.Core(目标'.NET Framework 4.5'和'Windows Phone 7.5及以上' - 这些是最小的框架版本, MVVMCross与

    一起使用

    b)将MyApp.Core添加为MyApp.Droid的项目引用

    c)使用NuGet,安装'MVVMCross Hot Tuna Starter Pack'。确保选择了稳定的分支(NuGet窗口顶部有一个组合框)

    一切都应该编译并运行良好。