清除Azure DevOps应用程序构建上的存储后,Xamarin Android System.TypeLoadException

问题描述

随机地,我似乎得到了System.TypeLoadException。每当我清除设备上的应用存储时,也会发生这种情况。这仅适用于由Azure DevOps管道生成的应用程序生成。无论将其配置为“调试”还是“生产”,我都无法从我的设备上在本地版本中重现此错误。这是我与此问题有关的一些错误

JsonSerializer.GetMatchingConverter(System.Collections.Generic.IList`1 [T]转换器,System.Type objectType) System.TypeLoadException:无法从typeref(程序集“ System.Data,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”中的预期类“ System.Data.sqlTypes.sqlBinary”)解析带有令牌01000113的类型

DataSetConverter.CanConvert(System.Type valueType) System.TypeLoadException:无法加载字段'System.Data.DataSet:PropertyChanging'(28)的类型,原因是:无法从typeref中解析带有令牌0100003c的类型(组件中的预期类'System.ComponentModel.PropertyChangedmz ntHandler' 'System,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e')程序集:System,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e类型:System.ComponentModel.PropertyChangedmz ntHandler成员:(空)

DefaultContractResolver.CreateObjectContract(System.Type objectType) System.TypeLoadException:无法解析来自typeref的令牌010000c4的类型(程序集“ System.Runtime.Serialization”中的预期类“ System.Runtime.Serialization.DataContractAttribute”,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e))

为什么程序集中缺少这些类?可能与Azure DevOps无法正确构建Android应用程序包有关吗?

解决方法

清除Azure DevOps应用程序构建上的存储后,Xamarin Android System.TypeLoadException

这样的错误通常意味着程序集不再同步。这意味着聚集在不同项目的bin和obj文件夹中的程序集包含混合版本,因此可能导致意外行为。

要解决此问题,请尝试:

  • 尝试清理并重建完整的解决方案,如果使用私有代理,请从每个项目文件夹中手动删除binobj文件夹。
  • 在使用Azure devops构建应用程序时检查是否使用Visual Studio 2019编译应用程序。

您可以查看this threadthis thread了解更多详细信息。