我的AppDomain中有类似的问题与本文中描述的内容
http://social.msdn.microsoft.com/Forums/en-AU/clr/thread/20de15d6-3111-4c2e-a04b-feb341a67ebc
任何人都可以详细说明解决方案,也许有一个例子,因为我迫切需要这个解决方案,但答案似乎对我来说有点混乱。
{
AppDomain domain2 = AppDomain.CreateDomain("ADFHelper");
obj = domain2.CreateInstanceAndUnwrap ("Econ.Test", "Econ.Test.ADFHelper");
object results = obj.GetType().InvokeMember("DoADFTest",System.Reflection.BindingFlags.InvokeMethod, Type.DefaultBinder, obj, new object[] { ResArray.ToArray() });
AppDomain.Unload(domain2);
}
答案 0 :(得分:1)
线程中的代码错误地使用AppDomain.Load
尝试在新域中加载程序集。实际上这实际上是在当前域中加载程序集。正如the documentation on MSDN所述(强调增加):
此方法仅用于将装配加载到当前 应用程序域。此方法是为了方便起见而提供的 无法调用静态Assembly.Load的互操作性调用者 方法。 要将程序集加载到其他应用程序域,请使用 CreateInstanceAndUnwrap。
等方法
解决方案如文档中所述 - 使用类似AppDomain.CreateInstanceAndUnwrap
的内容在新应用域中加载类。如果您要加载的类是MarshalByRefObject
并且您需要从当前应用程序域内部调用方法,这将是正确的方法。
如果您不想要MarshalByRefObject
并且不需要触摸新加载的类(即您只想在新的应用程序域中加载类型并“保持独立”),可以使用AppDomain.CreateInstance
,而不需要编组或远程处理。
答案 1 :(得分:0)
我不能给你一个编码的例子,因为它是导致问题的概念,而不是代码。
主要是,如果您将程序集加载到另一个AppDomain中,它也将被加载到当前的AppDomain中 - 这是必要的,以便能够访问其中的类型,从而对其执行某些操作。因此,在AppDomain.Unload()上,程序集仍将加载到您的调用AppDomain中。
您可以使用App http://msdn.microsoft.com/en-us/library/2xkww633%28v=VS.90%29.aspx中所述的AppDomain.CreateInstanceFrom方法解决此问题,因此您有2种方法可以避免此问题: