2

我目前从远程流中获取一个作为字节数组的程序集。无论如何将其加载到新的 AppDomain 中?

AppDomain.Load(byte[]) 不起作用,因为它给了我 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();
4

1 回答 1

1

您需要将该字节数组传递给在新 AppDomain 中运行的代码,并对该数据调用Load(byte[]) 。

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

于 2012-08-25T00:17:51.650 回答