InvalidCastException,错误的上下文
本文关键字:上下文 错误 InvalidCastException | 更新日期: 2023-09-27 18:04:07
我有一个exe,做数据转储。exe将根据配置动态拾取DLL,并向其传递一个类对象。DLL有一个用它编译的类的副本,并且可以在调试时看到作为对象的数据,没有问题。然而,当我试图将其强制转换到类时,它告诉我由于上下文的原因不能。我敢肯定,当我这样做的时候,我忽略了一些东西。
错误:
[A]MyClass不能强制转换为[B]MyClass。A型源于'MyExe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'上下文'默认'在位置'C:'MyPath' myexe '。B型起源从'MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'中
目录"C:'MyPath'MyDLL.dll"
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;
}
DLL有一个用它编译的类的副本
基本上不要那样做。在中应该有一个程序集中的类型,并且只有一个程序集。就CLR而言,这是完全不同的类型。
你可能想要一个插件和你的应用程序都可以引用的公共库。或者您可以让您的插件引用应用程序可执行文件,并在其中保留类型。