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

Suz*_*ron 3 c# remoting appdomain

如何调用我在另一个 AppDomain 中创建的对象的方法?我想避免使用CreateInstanceFromAndUnwrap,因为这需要我引用我想要操作的 DLL。

public static void Main() {
    // Create domain
    AppDomain domain = AppDomain.CreateDomain("Foo");

    // Load assembly
    domain.Load("C:\\Foo.dll");

    // Create instance of class
    System.Runtime.Remoting.ObjectHandle inst
        = domain.CreateInstance("C:\\Foo.dll", "MyNamespace.MyClass");

    // Call method -- How can I do this ???
    object result = inst.PleaseCallMethod("MyMethod", "param1", 42, "p3", null);
}
Run Code Online (Sandbox Code Playgroud)

我会Foo.dll

namespace MyNamespace {
    public class MyClass {
        public string MyMethod(string p1, int p2, string p3, string p4) {
            return "...";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,如果不首先创建包含静态方法的(可能是静态的)类的实例,我将如何调用静态方法?

Lin*_*nky 5

您可以致电:

domain.DoCallBack(() => Console.WriteLine("DoCallBack: {0}", AppDomain.CurrentDomain.FriendlyName));
Run Code Online (Sandbox Code Playgroud)

但这需要将运行代码的程序集加载到新的应用程序域中。

如果您的新应用程序域具有不同的基本路径和/或需要新应用程序域中的运行时无法解析的程序集,您可能需要创建一个在 DoCallBack 中调用的独立入口程序集,并从该程序集加载程序集他们想要的位置。