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
Libérer: 2025-01-15 12:16:48
original
640 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal