如何从另一个 appDomain 调用类的方法
Posted
技术标签:
【中文标题】如何从另一个 appDomain 调用类的方法【英文标题】:how to call a method of a class from another appDomain 【发布时间】:2010-10-01 22:23:44 【问题描述】:我的应用程序想要调用来自另一个 AppDomain 的类的方法。
AppDomain env = AppDomain.CreateDomain(
"test",
null,
new AppDomainSetup() ApplicationName = "test"
);
Assembly a = Assembly.LoadFrom("d:\\testenv1\\test2.dll");
//env.AssemblyResolve += new ResolveEventHandler(env_AssemblyResolve);
env.Load(a.FullName);
ObjectHandle o = env.CreateInstance(a.FullName, "Test2.Class1");
现在我有了 Test2.Class1 的对象句柄,但我不知道如何调用 Class1 类的“动作”方法。
“动作”方法是这样的:
public void action()
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + " ok");
我尝试使用 o.unwrap() 方法获取对象的引用,但似乎对象已经转移到当前域中,所以“action”方法的输出打印了当前域名。
【问题讨论】:
为什么我在执行你的代码时得到FileNotFoundException
?程序集无法加载到测试应用程序域。它有一个强大的名字吗?
【参考方案1】:
将您要用于跨应用程序域通信的对象标记为MarshalByRefObject。
【讨论】:
以上是关于如何从另一个 appDomain 调用类的方法的主要内容,如果未能解决你的问题,请参考以下文章