Maison >développement back-end >C++ >Comment charger de manière récursive des assemblys et leurs références dans un domaine d'application distinct ?
Chargement d'un assembly avec des références récursives dans AppDomain
Lors du chargement d'un assembly dans un domaine d'application distinct (AppDomain), vous devez également charger manuellement ses références. Sinon, une erreur FileNotFoundException peut survenir en raison de dépendances manquantes.
Afin de charger récursivement un assembly et toutes ses références, il est recommandé :
<code class="language-C#">// 在当前 AppDomain 中创建一个代理类。 class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) => Assembly.LoadFile(assemblyPath); } // 创建一个新的 AppDomain。 AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // 在新的 AppDomain 中创建一个代理实例。 var value = (Proxy)domain.CreateInstanceAndUnwrap( typeof(Proxy).Assembly.FullName, typeof(Proxy).FullName); // 使用代理将程序集加载到新的 AppDomain 中。 var assembly = value.GetAssembly(assemblyPath); // 迭代程序集的引用并递归加载它们。 foreach (AssemblyName refAsmName in assembly.GetReferencedAssemblies()) { LoadAssemblyWithReferences(refAsmName, domain); }</code>
Utilisez LoadFrom() et LoadFile() pour charger l'assembly
Le chargement d'un assembly à l'aide de LoadFrom() tentera de trouver l'assembly dans le GAC ou le dossier bin de l'AppDomain actuel. Cette opération peut échouer si l’assemblage ne se trouve dans aucun de ces emplacements.
En revanche, LoadFile() charge un assembly à partir d'un chemin de fichier spécifique. Cette méthode nécessite que vous chargez manuellement toutes les dépendances. Cependant, il offre un meilleur contrôle sur le processus de chargement de l’assemblage.
En suivant les étapes ci-dessus, l'assembly et toutes ses références peuvent être chargés de manière récursive dans un AppDomain distinct, permettant un environnement d'exécution plus isolé et contrôlé.
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!