我目前从InvalidCastException
中获得这个错误。
[A]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus] cannot be cast to
[B]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus].
Type A originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089' in the context 'Default' at location
'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'.
Type B originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the
context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'.
长得很丑!
我正在使用反射在运行时加载的程序集中调用一个方法。我要调用的方法返回 ObjectResult<T>
。当我尝试将调用结果转换为该类型时,出现错误。
我认为这是由于运行时加载的程序集包含对 System.Data.Entity 的引用,以及进行反射和转换的程序集;因为这些是两个不同的引用,所以类型被视为不同。(我这么说是否正确?)
有没有解决此问题的方法?我要调用的方法在一个 ObjectContext
上,所以我不能改变它的返回值。
谢谢。
编辑代码段:
public QueryResultSet<T> ObjectQuery<T>(string dataContext, string functionName, List<ObjectParameter> functionParameters)
{
var context = htContexts[dataContext];
ObjectResult<T> qResult = (ObjectResult<T>)context.GetType().InvokeMember(functionName, BindingFlags.InvokeMethod, null, context, functionParameters.ToArray());
return qResult;
}
错误发生在
qResult
行上(我只是快速模拟这个,因此没有try-catch)。
Assembly.LoadFrom
在运行时加载程序集。这本身可能会有问题吗?在调用中,EDMXAssemvly.ServiceStatus
是我传递的通用T
。 - Andy Hunt