【发布时间】:2013-03-02 23:53:43
【问题描述】:
我有一个执行数据转储的 exe。 exe 将根据配置动态获取 DLL,并将类对象传递给它。 DLL 有一个用它编译的这个类的副本,并且可以在调试下看到数据,作为对象没有问题。但是,当我尝试将其投射到课堂上时,它告诉我它不能因为上下文。我确信我有时会忽略一些事情。
错误:
[A]MyClass 不能转换为 [B]MyClass。 A型起源于 'MyExe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 位置“C:\MyPath\MyExe.exe”的上下文“默认”。 B型起源 来自“MyDLL,版本=1.0.0.0,文化=中性,PublicKeyToken=null” 位置“C:\MyPath\MyDLL.dll”的上下文“LoadNeither”。
EXE 代码:
Object[] param = new Object[] { MyClass };
MethodInfo m = type.GetMethod("MyMethod");
reader = (SqlDataReader)m.Invoke(obj, param);
DLL 代码:
public SqlDataReader MyMethod(Object param)
{
SqlDataReader reader = new SqlDataReader();
Type t = param.GetType(); //Returns MyClass
if (param is MyClass) //Returns false
reportItem = (MyClass)param; //Never executes
MyClass reportItem = (MyClass)param; //InvalidCastException
//other code here, pulling data
return reader;
}
【问题讨论】:
-
我的猜测是您必须动态创建作为参数传入的类对象。或者在 MyMethod 中,使用传入对象的属性创建一个新的 MyClass。