locked
MissingMethodException RRS feed

  • Question

  • Bonjour,

    Je suis en train de créer une application pour mobile sous .NET CF 2.0 et .Net Framework 2.0 avec VS2008 et Windows Mobile 5.0 SDK. J'utilise Json (framework Jayrock) pour structurer mes informations. J'ai créé une méthode pour mettre certaines informations de l'application dans un fichier .json. Lorsque je déploie mon application en local sur mon pc avec le .exe, le programme tourne sans problème.

    Lorsque je déploie mon application sur l'émulateur ou directement sur le pda, la pile s'arrete dès la première instruction de mon jsonWriter:

    jw.WriteStartObject();

     il me demande d'ouvrir le fichier "JsonWriterBase.cs" et dans la methode "public sealed override void WriteStartObject()" à la dernière ligne du code:

    EnterBracket(JsonWriterBracket.Object), j'obtiens une dialogBox d'erreur au titre: "l'exception MissingMethodException n'a pas été gérée" et en détails dans la boite de dialogue, j'ai le message:

    "le fichier ou l'assembly nommé 'System, version 1.0.5000.0, Culture = neutral, PublicKeyToken... ' ou l'une de ses dépendances est introuvable.  

    J'ai comme références les plus importantes dans mon projet: Jayrock.Json.dll(que j'ai ajouté manuellement après avoir téléchargé le dossier Jayrockv0.9..., fichier qui se trouvait dans bin/debug ) et System.dll (dll par défaut, version 2.0 dans d'après la boite de dialogue en bas à droite dans VS 2008).

    J'ai essayé de créer un dossier librairies dans mon bin pour y mettre mes dll jayrock avant d'y faire référence, après j'ai essayé d'activer la fonction de copie locale de la dll System, mais aucune de ces solutions ne semble fonctionner.

    J'ai besoin d'aide urgemment(projet d'école), avis à tous les fans du CF et de Windows Mobile. Merci.

     

    jeudi 5 juin 2008 23:22

Réponses

  • Bonjour,

    Au vue de ce qui est précisé sur le site, leur framework n'est pas fait, ou en tout cas pas testé, pour le CF.

    Dans tout les cas si vous n'avez pas vous même recompilé l'assembly pour le CF 2.0 elle ne pourra effectivement pas marché sur l'émulateur vu qu'il est compilé pour le framework 1.1.

     

    Vous pouvez essayer de créer sous VS 2008 un projet de type Smart Device / Class Library et d'y ajouter ensuite l'ensemble des fichiers source du framework et de recompiler. Si cela passe vous pourrez utiliser cet assembly.

    vendredi 6 juin 2008 10:29
  • ça y est!!!!!!!!!!!!!!!!!!!!!!!!!!!

    J'ai enfin réussi. Merci pour m'avoir aidé avec l'idée de compilation. Comme je le pensais au départ, l'outil de mise à niveau de VS ne reconstruit pas les dll, donc j'ai utilisé un outil embarqué dans le dossier de Jayrock, plus précisément dans le dossier src, build.bat. En l'ouvrant avec un éditeur de texte, je me suis rendu compte qu'à la dernière ligne, j'avais:

    ..\tools\nant-0.85\NAnt -t:net-1.1 %*

    J'ai remplacé le 1.1 par 2.0 et j'ai fait référence dans mon projet à la nouvelle dll dans le dossier bin/release. Et maintenant ça marche. C'est simplement génial. 

    Merci encore.

     

    vendredi 6 juin 2008 15:57

Toutes les réponses

  • Bonjour,

    Avez vous vérifiez que le framework Jayrock est compatible avec le .net compact framework 2.0 ?

    A première vu je dirais que non... (la méthode WriteStartObject doit faire appel à une méthode n'existant pas sur le .net cf 2.0).

    S'il est compatible vérifiez que vous utilisez le bon assembly compilé pour le .net cf 2.0.

    vendredi 6 juin 2008 07:38
  •  

    Bonjour,

    Sur la page officielle de Jayrock, il est marqué tout en bas de la page que toutes les versions du .NET framework sont supportées:

    "Which versions of the Microsoft .NET Framework are supported?
    Jayrock is compiled and delivered for Microsoft .NET Framework 1.1, but it can be run against any version of Microsoft .NET Framework, including 1.0 and 2.0. For version 1.0, you will have to recompile the binaries. For version 2.0, on the other hand, you don't need to do anything. Just toss the assemblies at your application and you are good to go. "
     

     Je sais que le CF est différent, mais il n' y a pas de doc sur le deploiement pour mobiles. Autre question (c'est mon premier projet wm), comment vérifier que j'ai le bon assembly compilé pour le .net cf 2.0? Dans les infos sur l'assembly Jayrock, la version c'est la 0.9.8316 et la version du runtime est 1.1.4322.

    Et s'il faut recompiler comment faire, vu que je suis sur VS2008?

    vendredi 6 juin 2008 08:12
  • Bonjour,

    Au vue de ce qui est précisé sur le site, leur framework n'est pas fait, ou en tout cas pas testé, pour le CF.

    Dans tout les cas si vous n'avez pas vous même recompilé l'assembly pour le CF 2.0 elle ne pourra effectivement pas marché sur l'émulateur vu qu'il est compilé pour le framework 1.1.

     

    Vous pouvez essayer de créer sous VS 2008 un projet de type Smart Device / Class Library et d'y ajouter ensuite l'ensemble des fichiers source du framework et de recompiler. Si cela passe vous pourrez utiliser cet assembly.

    vendredi 6 juin 2008 10:29
  • Bonsoir,

    J'ai compris la méthode, mais je ne l'ai pas encore testé, et pour cause, les fichiers dans le dossier src sont  répartis dans des (sous) dossiers. Je suppose que si je les met en vrac au fur et à mesure dans mon projet smart device, il y aura des références à des emplacements inexistants. Que dois-je faire?

    Connaissez-vous une librairie json qui prend en charge le CF 2.0? J'ai essayé Json.net, mais au moment du déploiement, il chargeait sur le device la dll Service.web.extensions, dont je n'avais même pas besoin, et qui faisait 5 Mo, ce qui faisait planter le programme!

     

    ......

     

     

    Je viens d'ajouter ("un à un") tous les fichiers dans src/Jayrock.json dans mon projet (donc sans tenir compte des dossiers), et il y a des erreurs de compilation. La première dit que:

     "Le type ou le nom d'espace de noms 'IConfigurationHandler' est introuvable (une directive using ou une assembly...)"

    Je remarque qu'il n'y a pas System.Configuration dans mes références. Mais alors, dois-je ajouter un "using System.Configuration" dans chaque fichier? ou c'est la méthode de compilation qui n'est pas bonne?

     

     

     

    vendredi 6 juin 2008 14:34
  • En fait, il y avait un fichier Jayrock.Json.sln dans mon repertoire, et quand je l'ai lancé, l'outil de conversion de visual studio s'est lancé, mais je ne vois toujours pas ce qu'il a fait, vu que mes dll sont toujours datées de la même date qu'avant. Ou encore, comment récupérer les dll correspondant à la nouvelle compilation?

     

    vendredi 6 juin 2008 14:58
  • Le seul fichier "mis à jour" avec l'utilitaire est Jayrock.json.csproj. En supposant que ma dll va faire appel au nouveau fichier, J'ai relancé mon programme, mais j'obtiens à nouveau la même erreur qu'au début! Je suis dépité. Je ne sais pas quoi faire.

    Je relance aussi ma question, de savoir si vous connaissez une version de json compatible avec le CF 2.0. Merci. 

     

    vendredi 6 juin 2008 15:22
  • Bonjour,

    En lançant la solution, la seule converion qui a été faite est de passer la solution et les projets du format visual studio 2003 au format visual studio 2008.

    Il faut effectivement que vous reproduisiez l'arborescence du projet originale dans votre projet SmartDevice... Sinon vous pouvez essayer de modifier à la main le fichier projet avec un éditeur de texte.

    vendredi 6 juin 2008 15:27
  • ça y est!!!!!!!!!!!!!!!!!!!!!!!!!!!

    J'ai enfin réussi. Merci pour m'avoir aidé avec l'idée de compilation. Comme je le pensais au départ, l'outil de mise à niveau de VS ne reconstruit pas les dll, donc j'ai utilisé un outil embarqué dans le dossier de Jayrock, plus précisément dans le dossier src, build.bat. En l'ouvrant avec un éditeur de texte, je me suis rendu compte qu'à la dernière ligne, j'avais:

    ..\tools\nant-0.85\NAnt -t:net-1.1 %*

    J'ai remplacé le 1.1 par 2.0 et j'ai fait référence dans mon projet à la nouvelle dll dans le dossier bin/release. Et maintenant ça marche. C'est simplement génial. 

    Merci encore.

     

    vendredi 6 juin 2008 15:57