Maison >développement back-end >C++ >Comment charger de manière récursive des assemblys et leurs dépendances dans un AppDomain ?
AppDomain : chargement d'assemblys récursifs et gestion des dépendances
Charger des assemblys et leurs dépendances dans un nouveau AppDomain peut être délicat. Pour les débutants, le FileNotFoundException
commun résulte souvent de dépendances manquantes.
Comprendre le problème
Un point clé à retenir est que lorsque vous chargez un assembly dans un AppDomain, ses assemblys référencés ne sont pas automatiquement chargés. Cela nécessite un chargement récursif pour garantir que toutes les dépendances sont disponibles. Ne pas le faire entraîne des erreurs telles que :
"Impossible de charger le fichier ou l'assembly 'MyDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ou l'une de ses dépendances. Le système ne trouve pas le fichier spécifié."
Cette erreur indique clairement la nécessité d'un chargement récursif de dépendances.
Adressage manuel des dépendances
Une tentative courante consiste à parcourir les références de l'assembly racine et à les charger individuellement. Cependant, cela conduit souvent à des FileNotFoundException
erreurs répétées pour les propres dépendances des assemblys référencés.
L'étape cruciale : CreateInstanceAndUnwrap
La solution réside dans l'utilisation de CreateInstanceAndUnwrap
avant que l'objet proxy ne s'exécute dans l'AppDomain cible. Cela garantit que le proxy fonctionne correctement dans son AppDomain désigné.
LoadFile
contre LoadFrom
L'utilisation de LoadFrom
peut entraîner des problèmes car elle recherche dans le GAC ou le dossier bin de l'application. Pour éviter cela, utilisez LoadFile
. N'oubliez pas que vous êtes toujours responsable du chargement récursif des dépendances.
Résumé
Le chargement réussi d'un assembly et de ses dépendances dans un AppDomain nécessite un chargement minutieux et récursif des dépendances. Utiliser CreateInstanceAndUnwrap
et opter pour LoadFile
plutôt que LoadFrom
vous aidera à gérer efficacement les assemblys référencés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!