Pregunta System.TypeLoadException: no se pudo resolver el tipo con el token 01000019


Tengo una solución Xamarin.Forms que contiene en cada proyecto (Android, iOS y Windows 8.1) una lib llamada Plugin.SecureStorage desde aquí: https://github.com/sameerkapps/SecureStorage Lo instalé a través de NuGET en cada proyecto.

Todo funciona bien en iOS y Windows 8.1, el problema está en Android. El proyecto en Android se construye correctamente, sin embargo, al inicio me sale esto:

[...]
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é significa? es un poco críptico para mí. ¿Como puedo resolver este problema?

Por supuesto, como requisito, agregué esta línea ...

SecureStorageImplementation.StoragePassword = "mypass";

en MainActivity.cs del proyecto de 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());
        }
    }
}

También encontré que al cambiar la posición de la línea arroja diferentes 'tipos de tokens' en la excepción.

ACTUALIZAR: Acabo de descubrir que la aplicación se ejecuta correctamente al compilar Modo de liberación. Sin embargo, no trabajar en el modo de depuración es un problema que me gustaría solucionar. No creo que esté fuera del alcance de esta pregunta.


10
2017-09-28 16:17


origen


Respuestas:


Aquí está la solución completa

  1. Instalar el paquete nuget https://www.nuget.org/packages/sameerIOTApps.Plugin.SecureStorage/
  2. Crear SecureStorageLinkerOverride.cs en Droid proyecto

    usando el sistema;
    usando Plugin.SecureStorage;
    
    namespace MyApp.Droid
    {
        clase estática pública LinkerPreserve
        {
            static LinkerPreserve ()
            {
                lanzar nueva excepción (typeof (SecureStorageImplementation) .FullName);
            }
        }
    
    
        public class PreserveAttribute : Attribute
       {
       }
    
    }
  3. Haga clic derecho en Proyecto Droid -> Propiedad -> Opción Android -> Enlazador -> "Ensambles SDK solamente"

Ahora ejecuta tu proyecto. Comenta a continuación cualquier problema que haya marcado como respuesta.


0
2017-10-20 02:33



Mismo error para mi

Problema: 

Tenía diferentes versiones de Xamarin.Froms paquete en mi solución.

Solución: 

Cambio en su proyecto Core, Droid e IOS Xamarin.Forms versiones. Asegúrese de que todas las versiones sean iguales.

Espero que esto funcione.


21
2017-11-07 18:01



En Visual Studio 2015, ejecutar el proyecto en Modo de liberación no tiene problemas (si no cambia la configuración predeterminada)

En Modo de depuración seleccionando Vinculación: "Unidades de SDK solamente" en Project Properties -> Android Options -> Linker, ejecutará el proyecto sin problemas.

O simplemente deje esos ajustes de depuración y agregue un archivo llamado "SecureStorageLinkerOverride.cs" en el proyecto de 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
    {
    }

}

3
2017-09-28 19:04