如何在单独的AppDomain中运行方法?

在我的场景中,我想在一个单独的AppDomain中执行一个方法。 可以采取多少种不同的方法来实现这一目标?

特别是,我有以下问题:

  • 我可以将程序集加载到AppDomain A并在AppDomain B中执行其方法吗?
  • 我似乎用AppDomain.DoCallBack方法和CrossAppDomainDelegate实现了这一点 。 我无法弄清楚如何在不同的AppDomain中使用程序集和方法是有意义的。 为了执行该方法,是否同样可以再次加载到其他AppDomain中?

为了在单独的AppDomain中执行代码,必须将包含该代码的程序集加载到该AppDomain中。 从那里,您可以使用reflection或AppDomain类上的“CreateInstance”方法从您的托管域中调用第二个AppDomain中的方法。

请记住,AppDomains是硬边界。 为了跨AppDomain边界进行通信,您需要使用远程处理或真正的IPC-ish机制。

这有点过时了,但我相信它仍然适用。 http://blogs.msdn.com/b/suzcook/archive/2003/06/12/57169.aspx

Suzanne Cook有一系列与此主题相关的post,因此可能值得浏览她的档案。

查看AppDomain类上的“CreateInstance”系列方法。 在过去,我已经在这种情况下使用了CreateInstanceFromAndUnwrap() 。

至于你关于有多少种方法可以做到这一点的问题…嗯,很多,但这在很大程度上取决于具体情况以及你掌握的对象。

添加Rob的正确答案,我想提一下,任何不使用reflection调用的尝试都会导致程序集被加载到您的调用AppDomain中,这可能是您要避免的。