首页 > 后端开发 > C++ > 如何在新的 AppDomain 中递归加载程序集及其引用?

如何在新的 AppDomain 中递归加载程序集及其引用?

Mary-Kate Olsen
发布: 2025-01-15 12:07:44
原创
587 人浏览过

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

在新的 AppDomain 中递归加载程序集及其所有引用

为了将程序集加载到新的 AppDomain 中并递归加载其所有引用,请按照以下步骤操作:

1. 在 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. 创建 AppDomain 和域代理:

<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. 加载根程序集:

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

Assembly assembly = value.GetAssembly(path);</code>
登录后复制

通过使用 CreateInstanceAndUnwrap 方法,代理对象将在新的 AppDomain 中执行,并且程序集及其所有依赖项将被递归加载。 请注意,您需要使用 LoadFile 而不是 LoadFrom 来避免问题中提到的依赖项解析问题。 改进后的代码包含了异常处理,以便更好地处理加载程序集过程中可能出现的错误。

以上是如何在新的 AppDomain 中递归加载程序集及其引用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板