LoaderException
的解决方法
一、问题描述:
利用反射机制得到程序集的所有类型,常常会出现下面的问题。代码如下:
Assembly
pAssembly = System.Reflection.Assembly.LoadFile(pfilepath);
Type
[] pTypes = pAssembly.GetTypes(); //
运行到这个地方会弹出如下错误描述
错误描述如下:
“未处理
System.Reflection.ReflectionTypeLoadException Message="
无法加载一个或多个请求的类型。有关更多信息,请检索
LoaderExceptions
属性。”
二、问题分析:
小弟我在一个项目中写一些类,编译生成了一个
dll
,利用反射机制得到了它的所有类型,运行正常。后来再加了一个类
A
,其继承自类
B
(类
B
位于另一个项目中),再编译生成,一切
OK
。可是利用自己编写的反射工具去得到它的类型时却出现上述错误,迷惑了一阵子,心中大呼:怪哉!后来终于找到问题元凶,请看下述解决方法。
三、
解决方法:
问题的主要原因出在:跨程序集反射。
即我们需反射的
A.dll
的程序集引用
B.dll
程序集,而在反射工具项目中却不存在对
B.dll
程序集的引用。因此我们只需在反射工具项目中添加对
B.dll
的引用即可,或者将
B.dll
拷贝到反射工具的执行目录下。