Salut à tous,
Cela fait pas mal de temps maintenant que je cherche à résoudre le problème suivant de la "bonne manière":
J'ai une application principale qui charge des plugins suivant le mode suivant:
- récupération des répertoires contenant les plugins
- chargement des dll en utilisant "Assembly.ReflectionOnlyLoadFrom" (pour voir si la dll implémente bien l'interface de plugin)
- chargement du plugin en utilisant "Assembly.LoadFrom"
Tout se passe bien tant que mes plugins n'ont pas de dépendances. Sur les machines des développeurs, cela ne pose pas de problème car la plupart des dépendances sont dans la GAC ou dans le PATH.
Or sur les machines utilisateur, certaines dépendances ne sont pas trouvées.
Voila un apperçu de l'architecture de l'application:
- ./application.exe
- ./plugins/pluginA/pluginA.dll
- ./plugins/pluginB/dependanceA.dll
- ./plugins/pluginB/pluginB.dll
- ./plugins/pluginB/dependanceB.dll
- ./plugins/pluginC/pluginC.dll
- ./plugins/pluginC/dependanceC.dll
J'ai déjà testé de nombreuses solutions:
- ajouter les répertoires de plugins dans la variable d'env PATH
- utiliser la callback "AppDomain.AssemblyResolve"
- rajouter les répertoires en utilisant "AppDomain.AppendPrivatePath" (mais qui est deprecated)
- utiliser différentes combinaisons de "Assembly.Load(string)", "Assembly.Load(AssemblyName)", "Assembly.LoadFile" et "Assembly.LoadFrom"
Je n'ai pourtant réussi à faire marcher aucune des ces techniques. La problématique semblant tellement simple ("chargement de plugins avec dépendances"), suis-je en train de passer à côté de quelque chose? Y-a-t il une subtilité que je n'ai pas saisi? Bref, toute aide est la bienvenue!
Bonne journée à tous,
Merci.
Partager