web-dev-qa-db-ja.com

System.TypeLoadException:トークン01000019で型を解決できませんでした

Xamarin.Formsソリューションには、各プロジェクト(Android、iOS、Windows 8.1)にPlugin.SecureStorageと呼ばれるlibが含まれています: 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());
        }
    }
}

また、行の位置を変更すると、例外で異なる「トークンタイプ」がスローされることもわかりました。

UPDATE:リリースモードでコンパイルすると、アプリが正常に実行されることがわかりました 。ただし、デバッグモードで動作しないことは修正したい問題であり、この質問の範囲外であるとは思わない。

13
Mr_LinDowsMac

完全なソリューションはこちら

  1. Nugetパッケージのインストール https://www.nuget.org/packages/sameerIOTApps.Plugin.SecureStorage/
  2. DroidプロジェクトにSecureStorageLinkerOverride.csを作成します

     using System; 
     using Plugin.SecureStorage; 
     
     namespace MyApp.Droid 
     {
     public static class LinkerPreserve 
     {
     static LinkerPreserve()
     {
     throw Exception(typeof(SecureStorageImplementation).FullName); 
    } 
    } 
     
    
        public class PreserveAttribute : Attribute
       {
       }
    
     
    } 
    
  3. Droid Project-> Property-> Android Option-> Linker-> "SDK Assemblies Only"を右クリックします。

プロジェクトを実行します。他の問題については、以下のコメントで回答とマークされています。

1
NishantVerma.Me

私にとって同じエラー。

問題:

ソリューションにXamarin.Formsパッケージの異なるバージョンがありました。

解決策:

Core、Droid、およびIOSでXamarin.Formsバージョンを投影します。すべてのバージョンが同じであることを確認します。

これがうまくいくことを願っています。

39
Sergio Bonilla

Visual Studio 2015では、プロジェクトをリリースモードで実行しても問題はありません(デフォルト設定を変更しない場合)

デバッグモードリンクを選択して:"SDK Assemblies Only"プロジェクトプロパティ-> Androidオプション->リンカ、プロジェクトを実行します問題なく。

または、単にこれらのデバッグ設定をそのままにして、「SecureStorageLinkerOverride.cs」というファイルを追加 Androidプロジェクト:

using System;
using Plugin.SecureStorage;

namespace MyApp.Droid
{
    public static class LinkerPreserve
    {
        static LinkerPreserve()
        {
            throw new Exception(typeof(SecureStorageImplementation).FullName);
        }
    }

    public class PreserveAttribute : Attribute
    {
    }

}
4
Mr_LinDowsMac

Xamarin.FormsがXamarin.Android、Xamarin.iOS ...プロジェクトで最新であることを確認してください

0
Luca Ziegler