0

最近开始使用 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)。)。

不过,这可能只是另一个问题,与异常无关。

4

3 回答 3

1

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

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

希望这可以帮助

于 2013-10-16T13:11:57.467 回答
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 窗口顶部有一个组合框)

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

于 2013-09-25T06:17:50.173 回答
0

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

当我用 Hot Tuna Starter pack V3.0.9 中的 dll 替换位于 packages\MvvmCross.HotTuna.MvvmCrossLibraries.3.0.12\lib\MonoAndroid16 的 Cirrious.MVVM 和 Cirrious.MVVM.Droid dll 时,一切都开始正常工作了。(我还测试了 3.0.4 也很好用)

我没有测试 V3.0.10 和 v3.0.11。我还测试了 v 3.0.13 BETA,但它仍然坏了。

于 2013-09-25T01:20:53.937 回答