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 :

dll et dépendances


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Par défaut dll et dépendances
    Bonjour,

    J'embarque des dll oracle dans mon appli en c#.
    Dans cette même appli, je voudrais utiliser dans une autre partie le package oracle installé sur le PC et ignorer les dll que j'ai embarqué.
    Comment faire? Y a t'il une commande qui permettrait de faire cela?

    Merci !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    bonsoir,

    Il faut utiliser System.Reflection pour charger/referencer ou decharger des assembly.....
    Sur le Net tapoter :
    unload referenced assembly c#

    a+

  3. #3
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par lucieseb Voir le message
    J'embarque des dll oracle dans mon appli en c#.
    De quel type de DLL parles-tu ? S'agit il de DLL natives ou managées (assembly) ? Car les deux ne se chargent de la même manière.

    Citation Envoyé par lucieseb Voir le message
    Dans cette même appli, je voudrais utiliser dans une autre partie le package oracle installé sur le PC et ignorer les dll que j'ai embarqué.
    Comment faire? Y a t'il une commande qui permettrait de faire cela?
    Cela devrait être possible. Mais ce ne sera pas trivial. Il nous en faut plus sur le contexte général, notamment l'aspect native/managé des DLLs à charger, ainsi que la manière dont elles sont chargées actuellement.


    Citation Envoyé par wallace1
    Il faut utiliser System.Reflection pour charger/referencer ou decharger des assembly.....
    Attention, on ne peut pas décharger spécifiquement un assembly. La seule chose qui puisse être faite, c'est de décharger le AppDomain dans lequel a été chargé l'assembly (mais cela décharge l'ensemble des assemblys de ce AppDomain).

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Par défaut
    Bonjour,

    J'embarque ces dll : oci.dll, Oracle.DataAccess.dll, oramts.dll, oramts11.dll, orannzsbb11.dll, oraociei11.dll et OraOps11w.dll
    Le problème ne vient pas tant du fait de les embarquer, ça fonctionne très bien.
    Mais à partir du moment où j'appelle depuis mon appli un autre module (qui n'embarque pas ces dll), il a l'air de lui "passer" ces dll et la connexion passe par ces dll.
    J'aurai voulu dans mon autre module, faire le "ménage" si c'est possible car à ce moment ça ne fonctionne plus.

    Merci pour vos réponses très précieuses !

  5. #5
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par lucieseb Voir le message
    J'embarque ces dll : oci.dll, Oracle.DataAccess.dll, oramts.dll, oramts11.dll, orannzsbb11.dll, oraociei11.dll et OraOps11w.dll
    Alors, histoire de simplifier les choses, il y a à la fois des DLLs natives et managées !


    Citation Envoyé par lucieseb Voir le message
    Mais à partir du moment où j'appelle depuis mon appli un autre module (qui n'embarque pas ces dll), il a l'air de lui "passer" ces dll et la connexion passe par ces dll.
    Comment est appelé ce module ? S'agit-il d'un exécutable lancé par l'application ? D'un plugin ? Il nous faut des informations sur la manière dont l'application est architecturée.

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Bonjour,

    Attention, on ne peut pas décharger spécifiquement un assembly. La seule chose qui puisse être faite, c'est de décharger le AppDomain dans lequel a été chargé l'assembly (mais cela décharge l'ensemble des assemblys de ce AppDomain).
    oui merci francois je suis au fait de tout ce qui attrait au referencement de dll en general :

    https://bitbucket.org/3dotdev/dotnet...bly/?at=master

    a+

  7. #7
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Par défaut
    Le module peut être un exe ou un bat (j'ai même essayé en java) qui est lancé par l'application.

    Je vais étudier la question du référencement et le déchargement des assembly du AppDomain, c'est peut être LA solution.

    Merci

  8. #8
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par lucieseb Voir le message
    Le module peut être un exe ou un bat (j'ai même essayé en java) qui est lancé par l'application.
    Ok, très intéressant à savoir !

    Citation Envoyé par lucieseb Voir le message
    Je vais étudier la question du référencement et le déchargement des assembly du AppDomain, c'est peut être LA solution.
    Je ne pense pas que cela soit la solution malheureusement. Voici pourquoi. A priori, ton programme C# charge un assembly, qui doit lui-même interagir avec des DLLs natives. Et donc les charge à partir du répertoire de l'application.
    Ton programme peut également lancer un module (disons un exe, mais le problème serait le même un .bat). Lorsque le module est lancé, il charge les DLL nécessaires. Lorsqu'un processus charge des DLLs, il regarde dans les emplacements suivants, et dans cet ordre :
    1. la mémoire
    2. le dossier de l'application
    3. le dossier système
    4. le PATH
    5. le dossier courant


    Du coup, on peut voir en 1 que la recherche se fait d'abord depuis la mémoire.

    Ce qui explique le comportement que tu sembles avoir. Avec un link statique des DLLs (ce qui semble le cas ici), je crois (mais à confirmer) qu'il n'est pas possible d'avoir deux versions différentes d'une même DLL. Dans ce cas, il faut se tourner vers un link dynamique. Mais c'est plus lourd à mettre en oeuvre...



    Citation Envoyé par wallace1
    oui merci francois je suis au fait de tout ce qui attrait au referencement de dll en general :
    Je n'en doute pas. Cette précision était simplement pour notre lectorat

  9. #9
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Par défaut
    Merci pour ces précisions, je ne connaissais pas l'ordre de charge, maintenant je comprends mieux le résultat que j'ai.
    Je vais tenter le lien dynamique avec Assembly.LoadFile(@"chemindll");
    Mais le problème ne sera t'il pas le même puisque le lancement de l'autre exe viendra après le chargement dynamique des dll?
    En plus l'appel à l'exe, par exemple, va se faire plusieurs fois dans l'appli...

    L'autre solution aurait été de mettre un service à l'écoute sur le PC, comme ça l'exe sera lancé avant l'appli, mais je n'aime pas trop l'idée

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2012, 11h13
  2. [C#][DLL] Inclure dépendance lors de la génération
    Par Dozer71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/03/2011, 00h53
  3. Dépendances de DLL C++/CLI
    Par Chewbizz dans le forum C++/CLI
    Réponses: 16
    Dernier message: 22/08/2007, 17h14
  4. Comment avoir les dépendance d'une DLL
    Par wrida dans le forum C#
    Réponses: 4
    Dernier message: 23/05/2007, 14h18
  5. Libération d'une DLL avec dépendances
    Par Hidekii dans le forum C++
    Réponses: 8
    Dernier message: 02/11/2005, 17h35

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