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

cs_Killan 46 Messages postés jeudi 10 janvier 2002Date d'inscription 5 février 2010 Dernière intervention - 24 mai 2006 à 00:13 - Dernière réponse : cs_Killan 46 Messages postés jeudi 10 janvier 2002Date d'inscription 5 février 2010 Dernière intervention
- 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 

5 réponses

Répondre au sujet
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 24 mai 2006 à 18:19
+3
Utile
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..
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
cs_Killan 46 Messages postés jeudi 10 janvier 2002Date d'inscription 5 février 2010 Dernière intervention - 25 mai 2006 à 01:52
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Killan
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 24 mai 2006 à 02:16
Commenter la réponse de Lutinore
cs_Killan 46 Messages postés jeudi 10 janvier 2002Date d'inscription 5 février 2010 Dernière intervention - 24 mai 2006 à 10:12
0
Utile
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
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 25 mai 2006 à 01:45
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.