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 ?

Comment charger de manière récursive des assemblys et leurs références dans un domaine d'application distinct ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-15 12:16:48641parcourir

How to Recursively Load Assemblies and Their References into a Separate AppDomain?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn