System.TypeLoadException:无法使用令牌 01000019 解析类型
Posted
技术标签:
【中文标题】System.TypeLoadException:无法使用令牌 01000019 解析类型【英文标题】:System.TypeLoadException: Could not resolve type with token 01000019 【发布时间】:2017-02-06 17:51:44 【问题描述】:我有一个 Xamarin.Forms 解决方案,它在每个项目(android、ios 和 Windows 8.1)中都包含一个名为 Plugin.SecureStorage 的库,来自此处: https://github.com/sameerkapps/SecureStorage 我在每个项目中通过 NuGET 安装它。
在 iOS 和 Windows 8.1 中一切正常,问题出在 Android 上。 Android中的项目可以正确构建,但是在启动时我得到了这个:
[...]
Loaded assembly: MonoDroidConstructors [External]
09-27 18:14:49.880 D/Mono (30329): Assembly Ref addref AppConsume.Droid[0xb8cb0608] -> mscorlib[0xb8c64bc0]: 23
09-27 18:14:49.890 D/Mono (30329): Assembly Ref addref Xamarin.Forms.Core[0xb8cbca58] -> System.Collections[0xb8cc5980]: 3
09-27 18:14:49.900 D/Mono (30329): Assembly Ref addref Xamarin.Forms.Core[0xb8cbca58] -> System.Threading[0xb8cd4948]: 3
09-27 18:14:49.930 D/Mono (30329): Assembly Ref addref AppConsume.Droid[0xb8cb0608] -> Plugin.SecureStorage[0xb8cb43f8]: 2
Unhandled Exception:
System.TypeLoadException: Could not resolve type with token 01000019
这是什么意思?对我来说有点神秘。我该如何解决这个问题?
当然,作为要求,我添加了这一行...
SecureStorageImplementation.StoragePassword = "mypass";
在Android项目的MainActivity.cs中...
using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Plugin.SecureStorage;
namespace MyApp.Droid
[Activity(Label = "MyApp", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
protected override void OnCreate(Bundle bundle)
base.OnCreate(bundle);
SecureStorageImplementation.StoragePassword = "mypass";
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
我还发现更改行位置会在异常中引发不同的“令牌类型”。
更新:我刚刚发现应用程序在发布模式下编译时运行成功。但是,不在调试模式下工作是我想解决的问题,我认为这超出了这个问题的范围。
【问题讨论】:
在执行非常糟糕的代码合并之后,除了令牌 0100002a 之外,我也收到了这个错误,但是当我注释掉命名空间范围和/或 App 类 XAMLC 注释时,错误就会消失。我最终重新开始合并,问题就消失了。 【参考方案1】:对我来说同样的错误。
问题:
我的解决方案中有不同版本的 Xamarin.Forms
包。
解决方案:
在您的 Core、Droid 和 IOS 项目中更改 Xamarin.Forms
版本。确保所有版本都相同。
我希望这行得通。
【讨论】:
这为我解决了这个问题,尽管它在另一个跨平台包中不匹配。谢谢! 投票中,我在所有以下软件包中的Xamarin.Forms
和 Xamarin.Forms.Maps
软件包版本不匹配:便携式、iOS 和 Android 项目。
哇,哇……不知何故,在这些共享项目文件中存在一个链接,由于不存在真正的依赖关系,导致整个事情中断……仍然准确,你得到了我的投票!跨度>
我开始认为 Xamarin 不值得为 Android 付出努力。在 Android Studio 中编写您的应用程序比解决晦涩的 Visual Studio 错误更快。此外,生成的应用程序占用的空间更少,速度更快。从长远来看,它只是一个临时解决方案。
问题今天仍然存在,但在 iOS 上。 Xamarin.Forms 在所有项目中都有最新版本。仅在某些开发机器和 iOS 设备上发生,我不知道为什么。【参考方案2】:
在 Visual Studio 2015 中,以发布模式运行项目没有问题(如果您不更改默认设置)
在调试模式下,通过在 Project Properties -> Android Options -> Linker 中选择 Linking: "SDK Assemblies Only",将毫无问题地运行项目。
或者只是简单地保留这些调试设置并在 Android 项目中添加一个名为“SecureStorageLinkerOverride.cs”的文件:
using System;
using Plugin.SecureStorage;
namespace MyApp.Droid
public static class LinkerPreserve
static LinkerPreserve()
throw new Exception(typeof(SecureStorageImplementation).FullName);
public class PreserveAttribute : Attribute
【讨论】:
在哪里可以找到 Plugin.SecureStorage ? 通过 Nuget 安装这个包:nuget.org/packages/sameerIOTApps.Plugin.SecureStorage【参考方案3】:这里是完整的解决方案
-
安装nuget包https://www.nuget.org/packages/sameerIOTApps.Plugin.SecureStorage/
在 Droid 项目中创建 SecureStorageLinkerOverride.cs
使用系统; 使用 Plugin.SecureStorage; 命名空间 MyApp.Droid 公共静态类 LinkerPreserve 静态链接器保留() 抛出新异常(typeof(SecureStorageImplementation).FullName); public class PreserveAttribute : Attribute
右击Droid Project -> Property -> Android Option-> Linker -> "SDK Assemblies Only"
现在运行您的项目。对于其他标记为已回答的问题,请在下方评论。
【讨论】:
旧版本的xamarin需要在新版本中复制错误【参考方案4】:确保 Xamarin.Forms 在 Xamarin.Android、Xamarin.iOS... 项目中是最新的
【讨论】:
以上是关于System.TypeLoadException:无法使用令牌 01000019 解析类型的主要内容,如果未能解决你的问题,请参考以下文章
System.TypeLoadException:无法使用令牌 01000019 解析类型
System.TypeLoadException:'AndroidX.AppCompat.View.Menu.MenuItemImpl 类型的 VTable 设置失败'
System.TypeLoadException:“MySql.Data.EntityFrameworkCore.Query.Internal.MySQLSqlTranslatingExpressio
MySql EntityFrameworkCore System.TypeLoadException
FFImageLoading 在 Android 中引发异常并出现错误:System.TypeLoadException:由于找不到方法,无法加载方法覆盖列表: