我有一个执行数据转储的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;
}
答案 0 :(得分:3)
DLL有一个用它编译的这个类的副本
基本上不要这样做。您应该具有一个程序集中的类型,并且只有一个程序集。就CLR而言,这些是完全不同的类型。
您可能希望拥有一个插件和应用程序都可以引用的公共库。或者你可以让你的插件引用应用程序可执行文件并保持其中的类型。