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:リリースモードでコンパイルすると、アプリが正常に実行されることがわかりました 。ただし、デバッグモードで動作しないことは修正したい問題であり、この質問の範囲外であるとは思わない。
完全なソリューションはこちら
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
{
}
}
Droid Project-> Property-> Android Option-> Linker-> "SDK Assemblies Only"を右クリックします。
プロジェクトを実行します。他の問題については、以下のコメントで回答とマークされています。
私にとって同じエラー。
問題:
ソリューションにXamarin.Forms
パッケージの異なるバージョンがありました。
解決策:
Core、Droid、およびIOSでXamarin.Forms
バージョンを投影します。すべてのバージョンが同じであることを確認します。
これがうまくいくことを願っています。
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
{
}
}
Xamarin.FormsがXamarin.Android、Xamarin.iOS ...プロジェクトで最新であることを確認してください