我已经成功创建了一个继承自MarshallByRefObject的类。
上面的类还实现了一个接口,并从主AppDomain远程调用。还创建了DTO以传递信息。
我已经从远程类和调用域的调试器验证了远程加载的程序集未加载到主AppDomain中。同样,远程类型/程序集不会流入主AppDomain,通过Debug Watch验证到AppDomain.CurrentDomain.GetAssemblies()
。
AppDomain.CurrentDomain.GetAssemblies().Count() //From inside the remote object
121
AppDomain.CurrentDomain.GetAssemblies().Count() //At the client, after RPC call.
13
然后卸载远程/临时域。
但是,我仍然无法删除在远程域中读取的任何dll,我缺少什么?
我还尝试了以下的变体:
AppDomain.CurrentDomain.Load(File.ReadAllBytes(_.FullName))
和
Assembly.LoadFrom(_.FullName)
无论我使用哪一个,文件仍然被锁定,即使据我所知,程序集是远程加载和卸载的。