InvalidCastException,错误的上下文?

时间:2013-03-14 14:51:35

标签: c# dll

我有一个执行数据转储的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,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'in   位于'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;
}

1 个答案:

答案 0 :(得分:3)

  

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

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

您可能希望拥有一个插件和应用程序都可以引用的公共库。或者你可以让你的插件引用应用程序可执行文件并保持其中的类型。