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#] Assembly + Loader


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut [C#] Assembly + Loader
    bjr,

    J'ai un probleme :
    État insuffisant pour désérialiser l'objet
    Dans la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class Loader : MarshalByRefObject
    {
       ...
       // Le get
       public Type TypeAssemblyInstance
       {
          get { return __typeAssemblyInstance; }
       }
     
       // Load
       public void Load(string assemblyName)
       {
       this.__currentAssembly = Assembly.LoadFrom(assemblyName);
       this.__assemblies.Add(this.__currentAssembly);
       }
     
       // Recupere le type avec
       public void GetTypeAssemblyInstance()
       {
          this.__typeAssemblyInstance = this.__currentAssembly.GetType("MDIPlugins.FPlugins",true,false);
       }
    }
    Dans mon code principale je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       this.__loader.Load(fi.FullName);  // fi = fichier dll
       this.__loader.GetTypeAssemblyInstance();
       _typePlugins = this.__loader.TypeAssemblyInstance;
    arrivé au niveau de l'affectation 3eme ligne il me lance une exception serializationexception avec
    État insuffisant pour désérialiser l'objet.
    J'ai oublié un truc ?

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    As-tu lu l'excellent tuto de dev01
    http://vincentlaine.developpez.com/t...net/appdomain/

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    Oui je regarde en ce moment le tuto.

    Je pense que l'erreur vient quelque part dans mes classes plugins...

    Pourquoi ca marche differemment entre
    Assembly.Load("nomfichier") et un Assembly.LoadFrom("nomfichier.dll") ?

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    Résolu l'erreur venait d'une de mes méthodes que je renseignais mal.

    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    Je remet un petit peu a jour mon post.

    En ce qui concerne l'erreur c'est que je renseignais un mauvais chemin de mes modules dans le AppDomainSetup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AppDomainSetup _ads = AppDomain.CurrentDomain.SetupInformation;
    _ads.PrivateBinPath = Application.StartupPath+"/Modules/";
    _ads.ShadowCopyFiles = "false";
    j'ai oublié de mettre le rep de mes "Modules".

    Cependant, il n'y avait pas que ça d'erreurs.
    J'ai essayé également de renvoyer l'assembly loadé de mon Loader ou bien récupérer l'assembly chargé avec mon accesseur CurrentAssembly.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class Loader
    {
    Assembly __currentAssembly;
     
    public Assembly CurrentAssembly
    {
       get { return this.__currentAssembly; }
    }
     
    public Assembly Load(string assemblyName)
    {
       this.__currentAssembly = Assembly.Load(assemblyName);
       this.__assemblies.Add(this.__currentAssembly);
       return this.__currentAssembly;
    }
    }
    et j'essayais aussi de récupérer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    classe kelkonke
    {
      ... charge assembly avant
      Assembly __recupAss = this.__loader.CurrentAssembly;
    }
    Apparemment, cela provoque une erreure :
    System.Runtime.Serialization.SerializationException' s'est produite dans mscorlib.dll

    Informations supplémentaires*: État insuffisant pour désérialiser l'objet. Informations complémentaires nécessaires.
    Je ne voyais pas pourquoi ca me provoquais cette erreur alors que l'affectation à this.__currentAssembly marche et lorsque j'essayais de recuperer par l'accesseur ca ne marchait pas... grrr

    Du coup je load simplement comme tel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void Load(string assemblyName)
    {
       Assembly.Load(assemblyName);
    }
    La différence entre Assembly.Load() et Assembly.LoadFrom() :
    le Load n'a pas besoin de l'extension ".dll" mais utilise PrivateBinPath(AppDomainSetup) comme chemin.

    le LoadFrom utilise un FullPath vers la librairie avec son extension ".dll".

    Je sais c'est pas difficile à le savoir mais bon je le met quand même pour ceux qui oublie comme moi... :p

    j'espere que ca aidera d'autres.

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Merci de ta contribution BoeufBrocoli

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 31/10/2005, 15h04
  2. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  3. [FLASH MX 2004] composant Loader
    Par dens63 dans le forum Flash
    Réponses: 4
    Dernier message: 05/05/2004, 17h07
  4. Réponses: 18
    Dernier message: 29/10/2003, 16h34
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

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