日期:2014-05-18  浏览次数:20502 次

一个System.Reflection.Assembly的奇怪问题
代码如下
 //取得当前的程序集
 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly();

//通过类型创建对象实例
object o = assembly.CreateInstance("ProviderDemo.FileCartProvider");//这里总取不到对象,o始终是null

o.ToString();

这个是我自己学习时候按书本内容直接敲上去的一段代码,ProviderDemo.FileCartProvider类没有任何问题,直接使用
ProviderDemo.FileCartProvider a=new ProviderDemo.FileCartProvider();没有任何问题,但是当我使用assembly.CreateInstance("ProviderDemo.FileCartProvider");的时候,却怎么也取不到对象实例,总是报空引用异常(o==null)
实在不明白到底是为什么,希望能够得到解答

------解决方案--------------------
Assembly.CreateInstance 需要把类名写全,即各层命名空间写全。可以检查一下这个。
------解决方案--------------------
微软MSDN上关于Assembly.GetCallingAssembly的说明

Assembly.GetCallingAssembly 方法
返回调用当前正在执行的方法的 Assembly
http://msdn.microsoft.com/zh-cn/library/system.reflection.assembly.getcallingassembly(VS.85).aspx

所以个人理解,出现null值的原因可能是:楼主当前使用的方法与楼主想调用的Assembly不在同一个Assembly中

假如楼主改用Assembly.LoadFrom("ProviderDemo.FileCartProvider");应该可以解决
------解决方案--------------------
探讨
微软MSDN上关于Assembly.GetCallingAssembly的说明

Assembly.GetCallingAssembly 方法
返回调用当前正在执行的方法的 Assembly
http://msdn.microsoft.com/zh-cn/library/system.reflection.assembly.getcallingassembly(VS.85).aspx

所以个人理解,出现null值的原因可能是:楼主当前使用的方法与楼主想调用的Assembly不在同一个Assembly中



------解决方案--------------------
LS说的很清楚