2

我想创建一个新的 AppDomain。我尝试这样做:创建应用程序域并加载程序集

但我不知道我应该给我的域提供什么类型......

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”是什么?...我应该放什么?

谢谢!

4

1 回答 1

3

有问题的类型是您定义的代理类。它必须从 MarshalByRefObject 继承,并且您单独的 AppDomain和您当前的 AppDomain都必须能够找到它。

CreateInstanceFromAndUnwrap将在您单独的 AppDomain 中创建该类型的实例,然后在您当前的 AppDomain 中为您提供一个 __TransparentProxy,您可以将其转换为您的类型。代理对象上的方法调用将在您类型上的其他 AppDomain 中调用。

但是请记住,加载/卸载 AppDomain 非常昂贵,尤其是在性能方面,并且对于您尝试从程序集中获取资源的特定场景,听起来可能有更好的方法。您可能想问一个不同的问题,即如何正确访问您的资源文件。

于 2012-08-07T19:52:24.813 回答