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

C# Discussion :

XmlSerializer depuis une librairie


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 46
    Points : 39
    Points
    39
    Par défaut XmlSerializer depuis une librairie
    Bonjour,

    j'ai une librairie (HominLibrary) référencée dans mon projet. Jusque là pas de soucis.
    Quand j'utilise une méthode de cette librairie qui permet de deserialiser un objet depuis un fichier j'ai cette exception:

    A first chance exception of type 'System.Reflection.FileNotFoundException' occurred in mscorlib.dll
    Cette exception ne bloque pas l'exécution du programme et la méthode est correctement exécutée (la désérialization se fait).

    Cependant quand je force VS à lever cette erreur j'ai ceci:

    System.IO.FileNotFoundException occurred
    Message=Impossible de charger le fichier ou l'assembly 'HominLibrary.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5c2141a00325548' ou une de ses dépendances. Le fichier spécifié est introuvable.
    Source=mscorlib
    FileName=HominLibrary.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5c2141a00325548
    FusionLog=""
    StackTrace:
    à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
    à System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
    InnerException: System.IO.FileNotFoundException
    Message=Impossible de charger le fichier ou l'assembly 'HominLibrary.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5c2141a00325548' ou une de ses dépendances. Le fichier spécifié est introuvable.
    FileName=HominLibrary.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5c2141a00325548
    Donc comment c'est possible que l'assembly (HominLibrary) ne soit pas trouvée alors que la méthode s'exécute correctement quand on lève pas l'erreur ?
    C'est quoi ce HominLibrary.XmlSerializers ?

    La classe de la méthode utilisée se trouve dans : Voici le code en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public class Deserialize<T> where T : new()
    	{
    		public static T LoadFromFile(string fileName)
    		{
    			T result;
    				using (FileStream input = new FileStream(fileName, FileMode.Open))
    				{
                        XmlSerializer serializer = new XmlSerializer(typeof(T));
                        result = (T)serializer.Deserialize(input);
    				}
    			return result;
    		}
    [...]
    Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    Si tu vas dans les options de compilation tu peux voir une option "Generate serialization assembly". Elle indique s'il faut créer un assembly pour la serialisation XML (sgen). Si cette option est activée, tu obtiens un fichier . XmlSerializers.dll et ton programme n'aura pas à le créer à l'execution.

    Dans ton prog, tu désérialises un type de la library, .net essaie de charger l'assembly n'y arrive pas puisqu'il n'existe pas et le génére dynamiquement du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    XmlSerializer sr;
    try
    {
    sr = LoadXmlSerializer() // FIRST CHANCE EXCEPTION FILE NOT FOUND
    }
    catch // SECOND CHANCE
    {
    sr = CreateXmlSerializer()
    }
    Pour ne pas "voir" la première exception decoche la case "thrown" "levée" dans la gestion des exceptions (menu debug/exception).

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2012, 12h05
  2. Réponses: 2
    Dernier message: 30/10/2009, 22h46
  3. [2.0]Acces ressources.resx depuis une librairie
    Par bizet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/11/2008, 15h54
  4. Accès fonction d'une librairie depuis un classe
    Par Bourrine dans le forum Débuter
    Réponses: 2
    Dernier message: 08/08/2008, 09h15
  5. Réponses: 5
    Dernier message: 11/03/2003, 11h49

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