Dll et chemin d'accès [Résolu]

Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
- - Dernière réponse : cs_Killan
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
- 25 mai 2006 à 01:52
Bonjour,


J'ai 2 répertoires, un contenant un exe avec les dll nécessaires et un autre avec des fichier dont un plugins dans un sous-rep. celui-ci à besoin d'une dll en + que j'ai placé dans le 2eme répertoire


on a donc :

rep 1:
- l'exe
- des dlls


rep 2:
-batch
-dll
---sous-rep avec le plugin sous forme dll


le batch du rep 2 lance l'exe du rep 1 avec le chemin du rep 2 en argument.


le probleme est que le plugin au chargement ne trouve pas la dll qui est dans le rep 2 (donc ça plante avec une belle exception : + _innerException {"Le fichier ou l'assembly nommé liebesstein ou l'une de ses dépendances, est introuvable." } ) (liebesstein c le nom de la dll)


j'ai pensé qu'il serait p-e possible dynamiquement d'ajouter une chemin d'accès pour que l'application cherche les dll nécessaires là où je lui dit et donc trouver la dll du rep 2 ?


avez-vous une idée ?


merci d'avance

Killan
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
3
Merci
Dans le lien que j'ai donné c'est pas la solution de la GAC qui t'intéresse mais le moment ou je parle de la façon de nommer un répertoire pour permettre au chargeur d'assembly de trouver les assemblages et surtout de l'élèment Probing du fichier de configuration ainsi que de l'évènement AssemblyResolve du domaine d'application..

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 158 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
3
Merci
t'es idées sont bonne mais malheureusement ne fonctionnent pas avec ma structure (que je ne peu pas changer d'ailleur)

suite à tes conseils j'ai explorer l'aide sur le comment un assembly est chargé et ses chemins d'accès trouvé et j'ai trouvé une solution à mon probleme mais qui reste propre à mon cas

dans le rep1 j'ai du y placer la dll selon la nomenclature suivante :

d:\rep1\nomdll\nomdll.dll

ça fonctionne mais pas comme j'aurais voulu

note que j'avais essayé ta solution 2 mais liebesstein.dll ne trouvait pas les dll dont elle avait besoin (tout est entremelé mais j'ai pas le choix)

si jamais un jour je trouve je ferai un petit exemple sur le sujet

encore merci à toi

Killan

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 158 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Killan
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
Commenter la réponse de Lutinore
Messages postés
46
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
5 février 2010
0
Merci
Je vois plus ou moins, mais si je comprend bien le truc GAC sert de config pour l'application située dans mon répertoire 1 sauf que celui ci ne doit pas savoir que le rep 2 l'appel, du moins ile doit pas avoir de config specifique, doit rester générale.

en fait c'est comme le JRE de java et une application qui l'appelle, je tente de refaire un systeme de framework spécifique, jusque là ça fonctionne bien mais faut que l'application du rep1, grâce à un argument qd il se lance, puisse ajouter dyamiquement un répertoire où chercher des dll supplémentaires.

j'espère que vous me comprennez

sinon pour aider : en fonction de ce schéma (la partie droite de l'image) http://tech.daaboo.net/images/globalisation-grak.jpg

- le rep 1 est celui contenant grak.exe
- le rep 2 est celui contenant liebesstein.bat
- le plugins est dans le rep2/plugins
- la dll que le plugins à besoin est dans le rep 2 à la racine : liebesstein.dll

le truc est donc de dire quelque part pendant l'exécution de grak.exe que le rep 2 sert aussi à chercher les dll necessaire

si ça n'existe pas alors je mettrais les dll dans le rep de l'exe, mais ça serait dommage

merci à vous,

Killan
Commenter la réponse de cs_Killan
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
0
Merci
Je pense que ton arborescence de répertoire est un peu compliquée, le plus simple pour une application c'est d'être contenue toute entière dans un même répertoire avec des sous-répertoires éventuellement.. ou bien partagée avec la GAC. Je te montre les deux solutions qui permettent d'indiquer le chemin au chargeur d'assembly du CLR, j'ai pas testé avec la même arborescence que toi, dl, exe etc.. essaye de voir si ça peut t'aider..




// 1 ) Le fichier *.config


// Le fichier de configuration doit porter le même nom que ton exe ( extension comprise ) + .config
// ex : MonApplication.exe.config


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <runtime>
  
   CheminDeMonDossier"/>
  
 </runtime>
</configuration>

// 2 ) L'évènement AssemblyResolve.


[ STAThread ]
static void Main( )
{
    AppDomain ad = AppDomain.CurrentDomain;
    ad.AssemblyResolve += delegate
    {
        MessageBox.Show( "Resolving.." ); // Pour l'exemple
        return Assembly.LoadFrom( "C:\\MonDossier\\MyLib.dll" );
    };


    Application.EnableVisualStyles( );
    Application.SetCompatibleTextRenderingDefault( false );
    Application.Run( new Form1( ) );
}
Commenter la réponse de Lutinore