-1

下面我试图动态加载 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' 来实现。但我对“影子复制”以及如何在上面的代码中实现相同的内容一无所知。

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

-BS

4

1 回答 1

0

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

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

这是基本原则。在实践中,您会发现许多障碍(它们通过 .NET 的版本而改变)需要解决,尤其是当您在应用程序域之间设置某种形式的通信时。

在这里提供工作代码可能会太大。

于 2010-08-05T09:26:46.537 回答