Chargement des assemblages et ses dépendances

Mon application charge dynamicment les assemblages au moment de l’exécution à partir de sous-dossiers spécifiques. Ces assemblys sont compilés avec des dépendances à d’autres assemblys. Le moteur d’exécution essaie de les charger depuis le répertoire de l’application. Mais je veux les mettre dans le répertoire des modules.

Existe-t-il un moyen de dire au runtime que les dll sont dans un sous-dossier séparé?

Une approche intéressante que j’ai utilisée récemment consiste à append un gestionnaire d’événements pour l’événement AssemblyResolve d’AppDomain.

AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler); 

Ensuite, dans la méthode du gestionnaire d’événements, vous pouvez charger l’assembly dont la résolution a été tentée à l’aide de l’un des remplacements Assembly.Load, Assembly.LoadFrom et le renvoyer à partir de la méthode.

MODIFIER:

Sur la base de vos informations supplémentaires, je pense qu’en utilisant la technique ci-dessus, la résolution spécifique des références à un assemblage est la seule approche qui fonctionne sans restructuration de votre application. Ce que cela vous donne, c’est que l’emplacement de chaque assemblage que le CLR ne parvient pas à résoudre peut être déterminé et chargé par votre code au moment de l’exécution … Je l’ai utilisé dans des situations similaires pour les deux architectures enfichables et pour l’intégrité d’une référence d’assembly. outil de numérisation.

Vous pouvez utiliser l’élément dans un fichier manifeste pour indiquer au moteur d’exécution de rechercher ses fichiers d’assemblage dans différents répertoires.

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

par exemple:

        

Vous pouvez utiliser l’élément présent dans le fichier de configuration de l’application. Plus d’informations sur ” Localisation de l’assemblage par code ou par sondage “.

L’assemblage chargé n’a pas de fichier de configuration d’application.

Eh bien, si vous connaissez les dossiers spécifiques au moment de l’exécution, vous pouvez utiliser Assembly.LoadFrom .