2016-11-14 15 views
3

在我们的应用程序(包含65个项目的解决方案)中,在运行时分析所有引用的程序集以确定是否存在Ninject模块(应用了一些过滤太)。这些模块稍后会加载到Ninject内核中,并且每个模块都会为内核声明绑定。在ReflectionOnly模式下将程序集加载到新AppDomain中时,方法没有实现

我们已经采用了一个加载器,它将引用的程序集加载到仅反射模式下的单独程序集中。与Ninject从目录加载程序集的方式不同之处在于该目录可以包含不应加载模块的程序集。并且在最开始时,并未加载所有引用的程序集。

的问题是loader(信贷萨沙理发)不能加载某些组件与

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information 

LoaderExceptions一个条目:

Method 'BeforeLoad' in type 'Lekis.AppBase.Core.BLLBaseCore' from assembly 'AppBaseCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation. 

这里有一些“有趣”的事实:

  • 方法BeforeLoad是虚拟的,一个实现接口方法
  • 上个星期,加载器异常说不同的方法没有实现(该方法不是虚拟的),后来,当我明确地实现它时,消息说该方法没有找到。上周
  • 组装AppBaseCore目标框架是.NET 3.5和3个组件加载失败
  • 现在组装AppBaseCore目标框架是.NET 4和5个组件加载失败
  • 一切都很好与应用否则

当我使用ILSpy和ILDAsm检查它们时,组件没有任何错误(显然)。

在这一点上,我真的迷路了,不知道如何解决这个问题。

任何帮助表示赞赏。

感谢

+1

“方法'BeforeLoad'是虚拟的和接口方法的实现”。虽然它真的是真的吗?检查[所有的答案在这里](http://stackoverflow.com/questions/948785/),以确保你没有触及某种版本/加载冲突。ILSpy/ILDAsm不会报告任何问题,因为该程序集在结构上是有效的。 –

+0

谢谢,@JeroenMostert。我会看看它。 –

回答

3

回答我的问题:

当异常被抛出,我去了堆栈跟踪和上市中创建的孩子的AppDomain中加载的组件:

AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies() 
{System.Reflection.RuntimeAssembly[15]} 
... 
[13]: {System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089} 
[14]: {System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089} 

,发现装配的两个版本System.Data。有问题的方法有一个System.Data.IDbTransaction类型的参数。

第一个被引用的项目针对.NET框架3.5。将其更改为4.0后,一切正常。

什么是一个愚蠢的问题...

相关问题