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;
}

InvalidCastException,错误的上下文

DLL有一个用它编译的类的副本

基本上不要那样做。在中应该有一个程序集中的类型,并且只有一个程序集。就CLR而言,这是完全不同的类型。

你可能想要一个插件和你的应用程序都可以引用的公共库。或者您可以让您的插件引用应用程序可执行文件,并在其中保留类型。