IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] XmlSerializer : erreur d'execution


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut [C#] XmlSerializer : erreur d'execution
    Bonjour,

    Je suis sous VS2005 express en .NET 2.0
    J'ai un bout de code tout simple qui marchait et qui ne fonctionne plus, sans que j'y touche. J'ai par contre touché à mon environnement de développement : installe du SDK .NET 2.0, puis déinstallation et réinstallation complete de VS2005 express.

    la ligne de code qui pose probleme est la suivante :

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Weather));
    l'erreur levée à l'execution est la suivante :

    The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)
    Une exception de première chance de type 'System.IO.FileLoadException' s'est produite dans mscorlib.dll
    la classe "Weather" est une classe à moi qui stock les infos de météo du site www.weather.com (que je récupère en XML via HTTP et que je transforme en objet via la deserialization). Ci joint la classe concernée, ça peut servir à d'autres...

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    using System.Net;
    using System.IO;

    namespace Xtream_ToolBox.Sensors {

    [XmlRoot("weather")]
    public class Weather {
    private const String serviceUrl = "http://xoap.weather.com/weather/local/";
    private const String partner_id = "xxxxxx";
    private const String license_key = "xxxxxx";

    public static String unit_metric = "m";
    public static String unit_standard = "s";

    [XmlElement("head")]
    public TWC_Header header;
    [XmlElement("loc")]
    public TWC_Location currentLocation;
    [XmlElement("cc")]
    public TWC_CC currentCondition;

    // default constructor
    public Weather() {
    }

    public static Weather getCurrentConditionWeather(String codeLocation, String unit) {
    Weather weather = null;

    try {
    Uri uri = new Uri(serviceUrl + codeLocation + "?cc=&prod=xoap&par=" + partner_id + "&key=" + license_key + "&unit=" + unit);
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Weather));

    WebResponse webResponse = HttpWebRequest.CreateDefault(uri).GetResponse();
    Stream stream = webResponse.GetResponseStream();
    weather = (Weather)xmlSerializer.Deserialize(stream);
    stream.Close();
    } catch (InvalidOperationException invalidOperationException){
    Console.WriteLine(invalidOperationException.Message);
    } catch (Exception exception) {
    Console.WriteLine(exception.Message);
    }

    return weather;
    }
    }

    public class TWC_Header {
    [XmlElement("locale")]
    public String locale;
    [XmlElement("form")]
    public String form;
    [XmlElement("ut")]
    public String ut;
    [XmlElement("ud")]
    public String ud;
    [XmlElement("us")]
    public String us;
    [XmlElement("up")]
    public String up;
    [XmlElement("ur")]
    public String ur;
    }

    public class TWC_Location {
    [XmlElement("dnam")]
    public String name;
    [XmlElement("tm")]
    public String time;
    [XmlElement("lat")]
    public String latitude;
    [XmlElement("lon")]
    public String longitude;
    [XmlElement("sunr")]
    public String sunRise;
    [XmlElement("suns")]
    public String sunSet;
    [XmlElement("zone")]
    public String zone;
    }

    public class TWC_CC {
    [XmlElement("lsup")]
    public String lsup;
    [XmlElement("obst")]
    public String obst;
    [XmlElement("tmp")]
    public String tmp;
    [XmlElement("flik")]
    public String flik;
    [XmlElement("t")]
    public String t;
    [XmlElement("icon")]
    public String icon;
    [XmlElement("bar")]
    public TWC_Bar bar;
    [XmlElement("wind")]
    public TWC_Wind wind;
    [XmlElement("hmid")]
    public String hmid;
    [XmlElement("vis")]
    public String vis;
    [XmlElement("uv")]
    public TWC_Uv uv;
    [XmlElement("dewp")]
    public String dewp;
    [XmlElement("moon")]
    public TWC_Moon moon;
    }

    public class TWC_Bar {
    [XmlElement("r")]
    public String r;
    [XmlElement("d")]
    public String d;
    }

    public class TWC_Wind {
    [XmlElement("s")]
    public String s;
    [XmlElement("gust")]
    public String gust;
    [XmlElement("d")]
    public String d;
    [XmlElement("t")]
    public String t;
    }

    public class TWC_Uv {
    [XmlElement("i")]
    public String i;
    [XmlElement("t")]
    public String t;
    }

    public class TWC_Moon {
    [XmlElement("icon")]
    public String icon;
    [XmlElement("t")]
    public String t;
    }
    }
    la classe "XmlSerializer" étant une classe du framework, je ne voit pas bien que faire. Si qqun a déjà eu le probleme je suis prenneur.

    merci d'avance

  2. #2
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut xtream,

    Ne voyant pas d'erreur dans ton code alors je l'ai testé, je n'ai pas eu d'exception.

    Essaie de creer un nouveau projet Console, cree ta classe Weather et dans ton programme mes juste la ligne de code :
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Weather));
    et regarde si tu as encore ton exception.

    Sinon une recherche rapide sur google :
    Decoche la case à cocher 'Enable the Visual Studio hosting process' dans Project > [Nom Projet] Properties... > Debug

    Bonne chance A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    très cher Xtream,
    le code est clean ! mais j'ai juste une remarque à te faire ! pourquoi la soufrance de gerer les stream XML passe par un service web l'ami ! en plus je suis sur qu'il des SW gratos pour les conditions méteo !
    Pour ton problème, ne code ne pourrais jamais etre la cause, vue l'exception qui est remonté !
    ca doit etre ta GAC qui a été perturbé par les installs et désintall que tu as fait ! et donc l'appli porte utilise des assemlie avec des signatures differentes avec les signature des assemblés actuellement insatllées ...
    pour resourdre le probleme mehdi_tn a bien repondu !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    merci pour ces infos.

    concernant la case à cocher "Enable the Visual Studio hosting process", si je la coche, je ne peut pas lancer mon programme, j'ai l'erreur suivante : "Erreur lors de l'execution du projet : Impossible de démarrer le déboggage. The Binding handle is invalid".

    je vais donc essayer de créer un projet "tout neuf" et de remettre mon code dedans, je vous tiens au courant.

    Concernant les remarques de Roshdy, j'ai pas bien compris le probleme. Le service fournis par The Weather.com est un service gratuit. Ce n'est pas un "vrai" Web Service SOAP mais je n'ai pas trouvé mieux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon, effectivement, si je fais un nouveau projet et que je met juste ce code là dedans, cela fonctionne.
    C'est donc bien un probleme de signature d'assembly.

    Y a pas un moyen manuel ou automatique de faire un "rebuild" du projet sans qu'il vérifie ses signatures là ? ou de corriger les signatures ?

  6. #6
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Commence par supprimer les repertoires bin et obj.
    Si ca marche pas, supprimer toutes les references vers les assembly et rajoutte les.
    Si ca marche pas, refais ton projet dés le debut

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon. Supprimer le obj et bin ne fonctionne pas.
    Supprimer les references pour les remettres non plus.
    Recréé un projet de zero non plus. Il doit y avoir un fichier que je copie qu'il ne faudrait pas mais je ne trouve pas lequel.

    si ça peut aider, j'ai ça comme trace au lancement.

    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'D:\Developpements\RAD\Xtream Toolbox\bin\Debug\Xtream's ToolBox.exe' chargé, symboles chargés.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'Xtream's ToolBox.exe' (Managé) : 'D:\Developpements\RAD\Xtream Toolbox\bin\Debug\fr\Xtream's ToolBox.resources.dll' chargé, aucun symbole chargé.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_fr_b77a5c561934e089\mscorlib.resources.dll' chargé, aucun symbole chargé.
    'Xtream's ToolBox.exe' (Managé) : 'malkmfli' chargé, aucun symbole chargé.
    'Xtream's ToolBox.exe' (Managé) : 'C:\WINDOWS\assembly\GAC_MSIL\System.Management\2.0.0.0__b03f5f7f11d50a3a\System.Management.dll' chargé, aucun symbole chargé.
    je comprend pas pourquoi il va chercher les DLL dans C:\WINDOWS\assembly\GAC_32 ou C:\WINDOWS\assembly\GAC_MSIL alors que les references que j'ajoutent au projet me disent que les DLL sont dans C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon, j'ai reussi a faire fonctionner le tout sur un nouveau projet. Mais je ne sais pas bien comment.

    J'ai été dans les propriétés du projet et j'ai ajouté dans les chemins d'accès aux références le chemin : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

    j'ai compilé, ça a fonctionné.

    Ensuite je l'ai enlevé, j'ai recompilé et ça marche toujours

    globalement ça marche, je suis content, mais je reste un peu sur ma faim, car j'ai pas bien compris pourquoi...

    en tout cas merci à tous!

  9. #9
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut, content que tu as pu resoudre ton probleme,

    tu avais surement des problemes de versions d'assembly dus à des mauvais referencements. Peut etre à cause des installations multiples que tu as faites.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  2. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 17h38
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo