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

cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 23 mai 2013 à 12:21 - Dernière réponse : cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention
- 24 mai 2013 à 09:08
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
Afficher la suite 

2 réponses

Répondre au sujet
cs_vincnet68 100 Messages postés samedi 26 octobre 2002Date d'inscription 24 mai 2013 Dernière intervention - 24 mai 2013 à 09:08
+1
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_vincnet68
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 23 mai 2013 à 21:59
0
Utile
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...
Commenter la réponse de yann_lo_san

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.