我想创建一个新的AppDomain。我尝试这样做:Create application domain and load assembly
但我不知道我想给我的域名提供什么类型......
var domain = AppDomain.CreateDomain("NewAppDomain");
var path = @"C:\work\SomeAssembly.dll";
var t = typeof(SomeType);
var instance = (SomeType)domain.CreateInstanceFromAndUnwrap(path, t.FullName);
我真正想做的是create
一个加载程序集并找到其引用的临时AppDomain。然后我将创建另一个AppDomain并加载所有引用的程序集和临时AppDomain中的那个。最后,我会unload
临时AppDomain,并在我使用其他程序集时可以卸载的其他AppDomain中工作。
我的主要问题是:上面代码中的“SomeType”是什么? ......我想把它放在那里?
谢谢!
答案 0 :(得分:3)
有问题的类型是您定义的代理类。它必须从MarshalByRefObject继承,并且您的单独AppDomain 和您当前的AppDomain 必须能够找到它。
CreateInstanceFromAndUnwrap
将在您单独的AppDomain中创建该类型的实例,然后在您当前的AppDomain中为您提供__TransparentProxy,您可以将其作为类型进行投射。您的代理对象上的方法调用将在您的类型的其他AppDomain中调用。
请记住,加载/卸载AppDomain非常昂贵,特别是在性能方面,并且对于尝试从程序集中获取资源的特定方案,听起来似乎有更好的方法。您可能想要询问有关如何正确访问资源文件的其他问题。