首页 > 解决方案 > 将 Android 应用程序升级到 MvvmCross 6.4.1 导致在 Visual Studio 2017 上构建失败

问题描述

如标题所示,我正在升级现有 Xamarin.Android 项目的依赖项。Android 项目对大部分跨平台代码使用 MvvmCross(我们也支持其他平台)。作为此次升级的一部分,我们将从 MvvmCross 6.2.2 迁移到 6.4.1。

但是,升级库后,在使用 Visual Studio 2017 构建时,项目不再按预期构建。我收到的错误消息如下所示。我试过清洁和重建无济于事。该项目使用 Visual Studio 2019 构建,但出现了奇怪的行为;这甚至在升级我们的依赖项之前就已经发生了。

任何有关解决此问题的可能方法的建议将不胜感激。非常感谢您!

The "LinkAssemblies" task failed unexpectedly.
Java.Interop.Tools.Diagnostics.XamarinAndroidException: error XA2006: Could not resolve reference to 'System.Collections.Generic.Stack`1' (defined in assembly 'MvvmCross, Version=6.4.1.0, Culture=neutral, PublicKeyToken=null') with scope 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. When the scope is different from the defining assembly, it usually means that the type is forwarded. ---> Mono.Cecil.ResolutionException: Failed to resolve System.Collections.Generic.Stack`1
   at Mono.Linker.Steps.MarkStep.HandleUnresolvedType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
   at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
   at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
   at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.InitializeType(TypeDefinition type)
   at Mono.Linker.Steps.MarkStep.InitializeAssembly(AssemblyDefinition assembly)
   at Mono.Linker.Steps.MarkStep.Initialize()
   at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
   at Mono.Linker.Pipeline.Process(LinkContext context)
   at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
   --- End of inner exception stack trace ---
   at Java.Interop.Tools.Diagnostics.Diagnostic.Error(Int32 code, Exception innerException, String message, Object[] args)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() RadResponder.Mobile.UI.Droid            

标签: xamarinxamarin.androidupgrademvvmcrossbuild-error

解决方案


从 MvvmCross 6.3.1 升级到 MvvmCross 6.4.1 并使用 VS 2017 后,我们也有类似的错误:

未处理的异常:System.TypeLoadException:无法从 typeref 解析带有令牌 01000113 的类型(预期类 '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.Stack1 成员:(null)发生

无法使用来自 typeref 的令牌 01000113 解析类型(预期类 '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.Stack1 成员:(null)

  at MvvmCross.Platforms.Android.Binding.MvxAndroidBindingBuilder.InitializeContextStack () [0x00000] in D:\a\1\s\MvvmCross\Platforms\Android\Binding\MvxAndroidBindingBuilder.cs:273 
  at MvvmCross.Platforms.Android.Binding.MvxAndroidBindingBuilder.RegisterPlatformSpecificComponents () [0x0000c] in D:\a\1\s\MvvmCross\Platforms\Android\Binding\MvxAndroidBindingBuilder.cs:268 
  at MvvmCross.Binding.MvxCoreBindingBuilder.DoRegistration () [0x00048] in D:\a\1\s\MvvmCross\Binding\MvxCoreBindingBuilder.cs:36 
  at MvvmCross.Binding.MvxBindingBuilder.DoRegistration () [0x00000] in D:\a\1\s\MvvmCross\Binding\MvxBindingBuilder.cs:16 
  at MvvmCross.Platforms.Android.Binding.MvxAndroidBindingBuilder.DoRegistration () [0x00012] in D:\a\1\s\MvvmCross\Platforms\Android\Binding\MvxAndroidBindingBuilder.cs:32 
  at MvvmCross.Platforms.Android.Core.MvxAndroidSetup.InitializeBindingBuilder () [0x0000d] in D:\a\1\s\MvvmCross\Platforms\Android\Core\MvxAndroidSetup.cs:164 
  at MvvmCross.Platforms.Android.Core.MvxAndroidSetup.InitializeLastChance () [0x00006] in D:\a\1\s\MvvmCross\Platforms\Android\Core\MvxAndroidSetup.cs:151 
  at MvvmCross.Core.MvxSetup.InitializeSecondary () [0x0017a] in D:\a\1\s\MvvmCross\Core\MvxSetup.cs:132 
  at MvvmCross.Core.MvxSetupSingleton+<<StartSetupInitialization>b__13_0>d.MoveNext () [0x0001c] in D:\a\1\s\MvvmCross\Core\MvxSetupSingleton.cs:187 
--- End of stack trace from previous location where exception was thrown ---
  at MvvmCross.Core.MvxSetupSingleton.EnsureInitialized () [0x0006e] in D:\a\1\s\MvvmCross\Core\MvxSetupSingleton.cs:116 
  at MvvmCross.Platforms.Android.Views.MvxActivityViewExtensions.EnsureSetupInitialized (MvvmCross.Platforms.Android.Views.IMvxAndroidView androidView) [0x0001c] in D:\a\1\s\MvvmCross\Platforms\Android\Views\MvxActivityViewExtensions.cs:154 
  at MvvmCross.Platforms.Android.Views.MvxActivityViewExtensions.OnViewCreate (MvvmCross.Platforms.Android.Views.IMvxAndroidView androidView, Android.OS.Bundle bundle) [0x00014] in D:\a\1\s\MvvmCross\Platforms\Android\Views\MvxActivityViewExtensions.cs:39 
  at MvvmCross.Platforms.Android.Views.MvxActivityAdapter.EventSourceOnCreateCalled (System.Object sender, MvvmCross.Base.MvxValueEventArgs`1[T] eventArgs) [0x00000] in D:\a\1\s\MvvmCross\Platforms\Android\Views\MvxActivityAdapter.cs:76 
  at (wrapper delegate-invoke) System.EventHandler`1[MvvmCross.Base.MvxValueEventArgs`1[Android.OS.Bundle]].invoke_void_object_TEventArgs(object,MvvmCross.Base.MvxValueEventArgs`1<Android.OS.Bundle>)
  at MvvmCross.Base.MvxDelegateExtensions.Raise[T] (System.EventHandler`1[TEventArgs] eventHandler, System.Object sender, T value) [0x00000] in D:\a\1\s\MvvmCross\Base\MvxDelegateExtensions.cs:18 
  at MvvmCross.Droid.Support.V7.AppCompat.EventSource.MvxEventSourceAppCompatActivity.OnCreate (Android.OS.Bundle bundle) [0x00014] in D:\a\1\s\MvvmCross.Android.Support\V7.AppCompat\EventSource\MvxEventSourceAppCompatActivity.cs:33 
  at MvvmCross.Droid.Support.V7.AppCompat.MvxAppCompatActivity.OnCreate (Android.OS.Bundle bundle) [0x00000] in D:\a\1\s\MvvmCross.Android.Support\V7.AppCompat\MvxAppCompatActivity.cs:88 
  at ITG.Brix.Mobile.EOrder.Views.Activities.LoginActivity.OnCreate (Android.OS.Bundle bundle) [0x00002] in C:\Projects\Git\native-eorder\ITG.Brix.Mobile.EOrder\Views\Activities\LoginActivity.cs:25 

推荐阅读