J'ai une solution Xamarin.Forms qui contient dans chaque projet (Android, iOS et Windows 8.1) une bibliothèque appelée Plugin.SecureStorage à partir d'ici: https://github.com/sameerkapps/SecureStorage Je l'ai installé via NuGET dans chaque projet.
Tout fonctionne bien sous iOS et Windows 8.1, le problème est sous Android. Le projet dans Android est construit correctement, mais au démarrage, je reçois ceci:
[...]
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
Qu'est-ce que cela signifie? est un peu cryptique pour moi. Comment puis-je résoudre ce problème?
Bien sûr, à titre d'exigence, j'ai ajouté cette ligne ...
SecureStorageImplementation.StoragePassword = "mypass";
dans MainActivity.cs du projet Android ...
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());
}
}
}
J'ai également constaté que le fait de changer la position de la ligne génère différents «types de jetons» dans l'exception.
UPDATE: Je viens de trouver que l'application fonctionne correctement lors de la compilation en mode Release. Cependant, le fait de ne pas travailler en mode débogage est un problème que je voudrais résoudre. Je ne pense pas que ce soit hors de la portée de cette question.
Voici la solution complète
Créez SecureStorageLinkerOverride.cs dans le projet Droid
using System; using Plugin.SecureStorage; namespace MyApp.Droid { Classe statique publique LinkerPreserve { LinkerPreserve statique () { lève une nouvelle exception (typeof (SecureStorageImplementation) .FullName); } }}public class PreserveAttribute : Attribute { }
Faites un clic droit sur Droid Project -> Propriété -> Option Android -> Éditeur de liens -> "Assemblages SDK uniquement"
Maintenant, lancez votre projet. Commentaire ci-dessous pour tous les problèmes marqués comme réponse.
Même erreur pour moi.
Problème:
J'ai eu différentes versions du package Xamarin.Forms
dans ma solution.
Solution:
Changez dans votre Core, Droid et IOS projetez les versions Xamarin.Forms
. Assurez-vous que toutes les versions sont les mêmes.
J'espère que ça marche.
Dans Visual Studio 2015, l'exécution du projet dans Mode de publication n'a aucun problème (si vous ne modifiez pas les paramètres par défaut).
Dans Mode débogage en sélectionnant Liaison: "Assemblages SDK uniquement" dans Propriétés du projet -> Options Android -> Éditeur de liens, le projet sera exécuté sans problèmes.
Ou simplement laissez ces paramètres de débogage et ajoutez un fichier appelé "SecureStorageLinkerOverride.cs" dans le projet 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
{
}
}
Assurez-vous que Xamarin.Forms est à jour dans les projets Xamarin.Android, Xamarin.iOS ...