Composant WP Runtime – Type exception de charge?

Ce qui fonctionne> Configuration de la bibliothèque

J’ai une solution Windows Phone 8 avec 2 projets:

  • “Hello”, un projet de bibliothèque simple -> génère Hello.dll .
  • “HelloNativeRT”, un composant d’exécution WP avec des fichiers C ++ -> génère HelloNativeRT.dll et HelloNativeRT.winmd

Dans cette solution, la bibliothèque “Hello” fait référence au composant WP Runtime, donc les appels tels que …

HelloNativeRT.SampleNamespace test = new HelloNativeRT.SampleNamespace(); 

… fonctionne bien dans ce projet de bibliothèque.

Qu’est-ce qui ne fonctionne pas> Configuration de l’application WP8

Cependant, je souhaite utiliser ces deux bibliothèques dans une application Windows Phone 8 , mais sans append de références aux projets , car je dois envoyer les bibliothèques compilées aux clients.

  • J’ai référencé le fichier Hello.dll dans le projet, ainsi que le fichier HelloNativeRT.winmd .
  • Lorsque je lance l’application en mode débogage et que je passe à la ligne HelloNativeRT.SampleNamespace test = new HelloNative... il se bloque et indique “TypeLoadException”, car il ne peut pas charger le module natif.

Je suppose que je dois inclure le fichier HelloNativeRT.dll d’une manière ou d’une autre, car il contient le code natif (compilé), car le fichier winmd peut uniquement incorporer le code C ++ / CX.

Comment dois-je configurer mon projet pour inclure cette DLL?

J’ai essayé de le mettre à la racine du projet WP8, de le référencer, de l’intégrer … sans succès.

La raison était assez simple dans mon cas: le fichier .winmd et le fichier .dll générés à partir du composant WinRT doivent avoir LE MÊME NOM (par exemple: testRT.dll et testRT.winmd).

Ensuite:

  • Ajoutez le fichier .atamd medata comme référence dans votre projet.
  • Vérifiez que les fichiers .winmd / dll sont dans le même dossier pour être chargés correctement.

Tu dois:

  • Ajouter une référence à votre fichier DLL géré (le wrapper),
  • Ajoutez une référence à votre fichier de métadonnées winmd (le composant WinPRT),
  • Ajoutez votre fichier de bibliothèque DLL natif en tant que membre de votre projet , avec l’action de génération sur ” Contenu ” et ” Copier toujours ” sélectionnée.
  • Ajoutez une section à votre fichier manifeste :

WPAppManifest:

   external_component.dll    

Ce dernier point est celui qui est fait automatiquement par magie par Visual Studio lorsque vous référencez un projet WinPRT à partir d’un projet WP8 😉 Je suppose que peu de gens référencent manuellement les bibliothèques natives, car la documentation sur ce point est très rare. . Le seul lien où j’ai vu la solution mentionnée était ici …