【发布时间】:2017-03-27 20:14:34
【问题描述】:
在我们的应用程序(包含 65 个项目的解决方案)中,所有引用的程序集都在运行时分析是否存在 Ninject 模块(也应用了一些过滤)。这些模块稍后会加载到 Ninject 内核中,并且每个模块都为内核声明绑定。
我们采用了一个加载器,它以仅反射模式将引用的程序集加载到单独的程序集中。与 Ninject 可以从目录加载程序集的方式不同的是,该目录可以包含带有不应加载的模块的程序集。而且一开始,并不是所有引用的程序集都被加载。
问题在于loader(归功于 Sacha Barber)无法使用
加载某些程序集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 检查程序集时(显然)没有任何问题。
在这一点上,我真的很迷茫,不知道如何解决这个问题。
感谢任何帮助。
谢谢
【问题讨论】:
-
"方法
BeforeLoad是虚拟的,是接口方法的实现"。是真的吗?检查all the answers here 以确保您没有遇到某种版本控制/加载冲突。 ILSpy/ILDAsm 不会报告任何问题,因为程序集在结构上是有效的。 -
谢谢,@JeroenMostert。我去看看。
标签: c# .net .net-assembly appdomain assembly.reflectiononly