Maison >développement back-end >C++ >Comment charger de manière récursive des assemblys et leurs références dans un nouveau domaine d'application ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-15 12:07:44587parcourir

How to Recursively Load Assemblies and Their References in a New AppDomain?

Charger récursivement l'assembly et toutes ses références dans un nouvel AppDomain

Afin de charger un assembly dans un nouvel AppDomain et de charger récursivement toutes ses références, suivez ces étapes :

1. Créez une classe proxy dans AppDomain :

<code class="language-csharp">public class Proxy : MarshalByRefObject
{
    public Assembly GetAssembly(string assemblyPath)
    {
        try
        {
            return Assembly.LoadFile(assemblyPath);
        }
        catch (Exception ex)
        {
            //  记录异常信息以便调试
            Console.WriteLine($"加载程序集失败: {ex.Message}");
            return null;
        }
    }
}</code>

2. Créez un domaine d'application et un proxy de domaine :

<code class="language-csharp">AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

Type type = typeof(Proxy);
Proxy value = (Proxy)domain.CreateInstanceAndUnwrap(
    type.Assembly.FullName,
    type.FullName);</code>

3. Charger l'assemblage racine :

<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll");

Assembly assembly = value.GetAssembly(path);</code>

En utilisant la méthode CreateInstanceAndUnwrap, l'objet proxy sera exécuté dans un nouvel AppDomain et l'assembly et toutes ses dépendances seront chargés de manière récursive. Notez que vous devez utiliser LoadFile au lieu de LoadFrom pour éviter les problèmes de résolution de dépendance mentionnés dans la question. Le code amélioré inclut la gestion des exceptions pour mieux gérer les erreurs pouvant survenir lors du chargement d'un assembly.

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