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 :

PlugIn Question Repertoire


Sujet :

C#

  1. #1
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut PlugIn Question Repertoire
    Bonjour

    J'ai un exe qui définit une interface et qui charge des DLL qui implémente cette interface (plug-in).

    Mon exe et son fichier d'interface se trouve dans le repertoire A.

    Mes plug-in se trouvent dans le repertoire B.

    Cas figure 1:
    Si j'utilise Assembly.LoadFrom(Repertoire B) pour charger mes plug-in, j'ai un problème de cast car l'assembly Interface étant chargé 2 fois, ca merde. Je connais ce problème et une solution est de ne pas faire une copie locale du fichier d'interface.
    Celà est une solution mais ca me gène un peu.

    Cas figure 2:
    J'utilise Assembly.LoadFile(Repertoire B) pour charger mes plug-in. Là, tout fonctionne à merveille (en ayant dans le repertoire B les fichiers DLL d'interface) sauf que, lors d'un loadFile(), si un fichier est référencé par mon assembly à charger et que ce fichier n'est pas dans le repertoire A (ce qui peut arriver souvent), l'assembly n'est pas monté. En clair, un LoadFile() ne résout pas les problèmes de "liens" (en dehors des assemblys se trouvant dans le GAC).

    Comment puis-je faire alors pour avoir la souplesse du cas de figure 2 (pouvoir inclure dans une distribution d'une DLL l'ensemble des dépendances) et ne pas rencontrer cette exception au chargement ?

    Est-ce que la seule solution est d'installé les dépendances de mon plug-in dans le GAC ?

    Toutes idées, question sera la bienvenue

    Merci d'avance

    Nicolas
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Le répertoire B n'est donc pas un répertoire enfant du répertoire A ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  3. #3
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Si j'ai bien compris ce que tu as expliqué, je n'ai aucune erreur... Est-ce mon test sous visual studio correspond bien à ton cas ?

    Tu peux lancer directement le projet "Client" pour tester.
    Fichiers attachés Fichiers attachés
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour jérome

    Effectivement, dans ton cas et quand je fais ce que tu fais (déja testé d'ailleurs), je n'ai pas d'erreur... Tu remarques que dans ton repertoire B, tu n'as pas la DLL AssemblyInterface de présent

    Avec le LoadFile, j'ai pas d'erreur au chargement (quoi que dans mon cas si, mais dans d'autres tests plus simples effectués non)... mais après, dès que je vais vouloir instancier un objet via "CreateInstance()", celà va planter car, meme si le Loadfile s'est bien déroulé, il va me dire par exemple, sur le CreateInstance() "can't find file xxx.dll" qui correspond à une dépendance de la DLL de base 'pluginA.dll' par exemple.

    En gros, LoadFile fonctionne très bien si tu n'as pas de dépendances, ou bien si ces dépendances sont présentes dans l'Exe qui veut créer l'objet. Par contre, si l'exe qui veut créer à partir du LoadFile() et du createInstance n'a pas dans son repertoire la dll dont dépend l'assembly chargée, ca fait boum.

    A priori, au vue des forums et des explications du MSDN, la solution est simple.

    Soit LoadFrom mais une SEULE assembly de même nom peut-etre chargée, soit LoadFile mais à ce moment là, je "m'assois" sur mon chargement depuis un repertoire autre que celui de l'exe et/ou mes plug-in n'ont aucune dépendance hors dll présente dans le GAC.

    Soit je fais une fonction qui copie mes dll venant du repertoire plug-in dans le repertoire de mon exe (en evitant d'écraser les fichiers présents) et en fin de programme, je dégage ces fichiers copiés.


    Je pense que la solution 3 va être celle adoptée au vue de la non "solution" me convenant à ce problème.

    Merci en tout cas d'avoir essayer
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Avec le LoadFile, j'ai pas d'erreur au chargement (quoi que dans mon cas si, mais dans d'autres tests plus simples effectués non)... mais après, dès que je vais vouloir instancier un objet via "CreateInstance()", celà va planter car, meme si le Loadfile s'est bien déroulé, il va me dire par exemple, sur le CreateInstance() "can't find file xxx.dll" qui correspond à une dépendance de la DLL de base 'pluginA.dll' par exemple.

    En gros, LoadFile fonctionne très bien si tu n'as pas de dépendances, ou bien si ces dépendances sont présentes dans l'Exe qui veut créer l'objet. Par contre, si l'exe qui veut créer à partir du LoadFile() et du createInstance n'a pas dans son repertoire la dll dont dépend l'assembly chargée, ca fait boum.

    A priori, au vue des forums et des explications du MSDN, la solution est simple.
    En fait, l'assembly commune (donc AssemblyInterface.dll dans mon exemple), tu ne la mets que dans le répertoire B ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    et non, la déclaration d'interface se trouve dans plusieurs repertoires et en plus, un plug-in peut très bien s'appuyer sur des librairies communes à plusieurs plug-in et voir à l'hote du plug-in
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

Discussions similaires

  1. [QUESTION] repertoire manquant dans SVN ?
    Par pseudocode dans le forum Millie
    Réponses: 1
    Dernier message: 19/01/2009, 01h00
  2. Réponses: 0
    Dernier message: 03/07/2008, 12h59
  3. connaitre le chemin du repertoire ou se trouve mon plugin
    Par bitbis dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 04/07/2007, 15h53
  4. [question bete] repertoire système
    Par RR instinct dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 14h01
  5. [Plugin][Question] Compatibilité plugin 2.x/3.x
    Par malrin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/03/2005, 15h58

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