C# 将字节[]程序集加载到新的AppDomain中

C# 将字节[]程序集加载到新的AppDomain中,c#,byte,appdomain,C#,Byte,Appdomain,当前,我从远程流获取一个作为字节数组的程序集。是否仍要将其加载到新的AppDomain中 AppDomain.Load(字节[])不工作,因为它给了我FileNotFoundException,我假设程序集必须在我的计算机上 AppDomain domain = AppDomain.CreateDomain("Test"); Thread t = new Thread(() => { Assembly assembl

当前,我从远程流获取一个作为字节数组的程序集。是否仍要将其加载到新的AppDomain中

AppDomain.Load(字节[])不工作,因为它给了我FileNotFoundException,我假设程序集必须在我的计算机上

        AppDomain domain = AppDomain.CreateDomain("Test");

        Thread t = new Thread(() =>
        {
            Assembly assembly = domain.Load(bytes);
            MethodInfo method = assembly.EntryPoint;
            if (method != null)
            {
                object o = assembly.CreateInstance(method.Name);
                try
                {
                    method.Invoke(o, null);
                }
                catch (TargetInvocationException ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
        });
        t.Start();

您需要将该字节数组传递给在新AppDomain中运行的代码,并调用该数据


现在,与任何程序集加载一样,您需要了解在使用不同的加载程序集方法时如何解析依赖关系。在大多数情况下,您必须将依赖项预加载到新的AppDomain或添加AssemblyResolver事件处理程序。搜索以获取Suzanne Cook关于加载程序集的文章集。

您的意思是,我应该创建一个类或方法,我将在AppDomain中创建它?我需要看一下这些文章。是的,你应该从你想要加载程序集的域中加载程序集。否则,您可能会像当前示例一样从新的AppDomain中泄漏类(它会创建对父域可见的对象)。旁注:我假设您理解线程与AppDomain无关,任何线程中的代码都可以多次跨越AppDomain边界。线程是绕过错误的一种方式(我试图在WinForm中运行WinForm),我意识到类正在泄漏。非常感谢你的帮助。