Impossible de trouver l'assembly (chargement dynamique de DLL) [Résolu]

Signaler
Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
-
Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
-
Bonjour,

J'ai une application qui charge dynamiquement des dll (plugin) d'après une liste dans un fichier.
Le chargement se fait via :
 Assembly.LoadFrom(@plugInFolder + "\" + dllName);


La dll apparaît bien lorsque je fait :
AppDomain.CurrentDomain.GetAssemblies()


Puis je désérialize un fichier qui utilise cette assembly (Binary) et j'obtient l'erreur suivante :
Impossible de trouver l'assembly '...'

Je ne comprend pas,

Est-ce que quelqu'un pourrait m'aider.

Merci

Vincnet68

2 réponses

Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
1
Merci pour ta réponse, elle m'a permis de trouver une autre solution.

Voilà ce que je fait :
Chargement de la dll
Assembly assembly =   Assembly.LoadFrom(@plugInFolder + "\" + dllName);


Ajout dans program.cs
static void Main()
{
 //.......
AppDomain.CurrentDomain.AssemblyResolve +  = new ResolveEventHandler(CurrentDomain_AssemblyResolve);
//........
}

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string dllFile = args.RequestingAssembly.ManifestModule.Name;
            if (System.IO.File.Exists(PlugInFolder + args.Name))
                return Assembly.LoadFrom(PlugInFolder + dllFile);
            else
                return Assembly.LoadFrom(System.Windows.Forms.Application.StartupPath + "\" + dllFile);

        }

Au vu de ce que donne args.RequestingAssembly.ManifestModule.Name je suis étonné que cela fonctionne mais ça marche.

J'espère que ça pourra servir à quelqu'un.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
Salut,

peut etre que ta dll référence un assembly qui n'est pas encore chargé dans l'appDomain.
En utilisant LoadFrom, tu ne résouds pas ce problème.
Microsoft conseille fortement d'utiliser la méthode Load à la place car celle-ci contient une stratégie de vérification des types référencés.
La trace de la pile te démontrera le type manquant.

Vérifier la doc. de la méthode Load car elle utilise des répertoires de recherche standards, il faut donc lui fournir le répertoire additionnel @plugInFolder via les propriétés définissants ces répertoires.

Autre solution, la méthode Load accepte les "octets" de l'assembly à la place du chemin, c'est à dire un tableau de byte[] contenant l'assembly chargé via un StreamReader ou n'importe quelle méthode Read d'un stream.

bye...