C# ObjectHandle unwrap为我提供一个MarshallByRefObject对象,而不是我的类对象
我试图将程序集加载到Appdomain中,但我的ObjectHandle似乎出现了一些问题 程序集A仅包含一个类:C# ObjectHandle unwrap为我提供一个MarshallByRefObject对象,而不是我的类对象,c#,.net-assembly,C#,.net Assembly,我试图将程序集加载到Appdomain中,但我的ObjectHandle似乎出现了一些问题 程序集A仅包含一个类: namespace MyTestAssembly { using System; public class SomeClass : MarshalByRefObject { public virtual bool Run() { return true; } } 在程序集B中,我
namespace MyTestAssembly
{
using System;
public class SomeClass : MarshalByRefObject
{
public virtual bool Run()
{
return true;
}
}
在程序集B中,我尝试如下调用类:
var assembly_path = "/path/to/something.dll"
System.AppDomain appDomain = System.AppDomain.CreateDomain("MyDomain");
System.Runtime.Remoting.ObjectHandle oh = appDomain.CreateInstanceFrom(assembly_path, "MyTestAssembly.SomeClass");
object obj = oh.Unwrap();
obj.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.InvokeMethod,
Type.DefaultBinder, obj, null);
AppDomain.Unload(appDomain);
这给了我一个例外:
An exception of type 'System.MissingMethodException' occurred in
mscorlib.dll but was not handled in user code
Additional information: Attempted to access a missing member.
如果我检查obj的类型,当我期望它是“SomeClass”对象时,它是MarshallByRefObject。我错过什么了吗?我试着看一些例子,似乎大多数人都是这样做的 这是一个DLL地狱问题,您加载的程序集不是您希望得到的程序集。使用Fuslogvw.exe查看这是如何发生的。感谢您的提示。所以我运行了这个程序,但遗憾的是我没有看到问题所在。我的dll中有一个WhereRefBind日志条目,里面的一切似乎都很成功,ref bind的位置是正确的(有点不确定应该寻找什么)