AppDomain卷影副本 - 加载/卸载动态加载的Dll

时间:2010-08-05 09:22:02

标签: c# shadow-copy appdomainsetup

我正试图动态加载dll的代码如下所示。

AppDomain appDomain = AppDomain.CreateDomain("DllDomain");
Assembly a = appDomain.Load(fileName);
//Assembly a = Assembly.LoadFrom(fileName);
objType = a.GetType(className);
obj = a.CreateInstance(className);
object[] args = new object[1];
args[0]=(object) "test";
object ret = objType.InvokeMember("Perform", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args);
string output = ret.ToString();
obj = null;
AppDomain.Unload(appDomain);

这是我在WCF服务中使用的代码,但它仍无效。

听说我们可以在AppDomain中使用'Shadow Copying'来实现。但我对“阴影复制”以及如何在上面的代码中实现相同的内容一无所知。

请提供工作代码作为“影子复制”的示例。

-B.S。

1 个答案:

答案 0 :(得分:0)

您可以将程序集加载到应用程序域中,但不能从该域中卸载它们。

但是,在一个应用程序域中,您可以创建第二个应用程序域并将程序集加载到第二个应用程序域中。之后,您可以选择卸载第二个应用程序域,然后卸载您加载到第二个应用程序域的程序集。

这是基本原则。实际上,当您在应用程序域之间建立某种形式的通信时,您会发现许多障碍(它们通过.NET版本进行了更改)。

在这里提供工作代码的规模可能太大了。