如何从另一个 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 调用类的方法的主要内容,如果未能解决你的问题,请参考以下文章

C# - 从另一个 AppDomain 中的方法返回值

如何从另一个类调用非静态抽象方法

如何在 AppDomain 下创建类的新实例

在运行时从另一个 AppDomain 调试动态加载的 DLL

如何在另一个 AppDomain 中调用方法

如何使用 AppDomain 限制静态类的范围以进行线程安全使用?