很常时间没有用反射,今天突然项目中要求使用,一直出现 未将对象引用设置到对象的实例的错误。
代码实现很简单,简单总结大致如下三行:
string path = "SQLServerDAL";
string className = path + "alldeadmin.t_public_xmclass";
Assembly.Load(path).CreateInstance(className);
以上代码是我简化过的,不过能说明问题。
注解:Assembly.Load(path),path的值应当为引用的dll文件的名称
CreateInstance(className),className的值应当为名字为path的dll文件里的命名空间。
我的SQLServerDAL.dll文件的命名空间结构如下图所示:
我反射的是t_public_xmclass类下的方法,所以为alldeadmin.t_public_xmclass。
出现“未将对象引用设置到对象的实例”或者对象为null的错误,通过上述可知道只需在path值和命名空间的值上找原因了。
经查,我的错误是因为忘了在项目中引用SQLServerDAL.dll文件了(呵呵,很低级的错误)。
注:path 的值一定要与您引用的dll文件名字一样,您可以用以下方法修改生成的dll程序集的名称:
1打开您要修改的项目属性(我这里是SQLServerDAL的属性)
2在属性页修改程序集名称,如图:
重新编译、引用就OK啦。
老韩07.12.25