在机房重构七层时,运行时出现如下错误,真是折磨了自己半天,网上查出很多办法,除了一种办法没使,其它的都试了,还是不行,其实在此期间,看到师哥的一篇博客,是有关这个问题的,但感觉有点看不懂,其实是自己没仔细看,一看到他那片博客关于这个问题,写了一篇,就给人一种很难的感觉,看到他那篇博客里面设计到很多文件夹感觉见都没见到过,所以就放弃了,但其实该文件夹就在自己建的项目里,自己没去点,就浪费了好多时间,最后还是用师哥的方法解决的。
问题出处:
首先该问题出现在反射的代码中,即
Return CType(Assembly.Load(AssemblyName).CreateInstance(className),Login.IDAL.ISelectUserAccess)
问题原因:(此处看的师哥的博客)
1.文件名与加载时的DLL文件名不一致。
2:.DLL文件根本不存在,即出现丢失情况。
2:.DLL文件根本不存在,即出现丢失情况。
解决方案:
首先确保自己的代码准确无误,主要是看参数是否正确
即在该项目My Project即可找到对应的程序集名、命名空间
下面熟悉一下什么事.dll文件:DLL是一种动态链接库文件,是一种不可执行文件,它本身是一个包含可由多个程序同时使用的代码和数据的库,(不是所以能运行的文件都叫可执行文件,有的可能是被执行,和一些程序绑定在一起,当你点击时运行,貌似看起来像是执行文件)。DLL有两种好处@1:可使进程可调用不属于其可执行代码的函数;@2:有助于共享数据和资源。
确保参数正确后,发现U层bin文件夹下面的bebug文件夹下面除了没有D层的.dll文件,其它层的.all文件都有。从师哥的博客中得知:.net类加载的机制就是默认从本程序集的bin文件中找要加载的程序集的.dll文件,所以启动项目的bin文件夹下要有其它程序的.dll文件(本人在各个程序的bin文件夹下找,发现一个规律,就是你本程序引用了谁,在本程序的bin下面就有引用程序的.dll文件,包括间接引用的【即U层引用Facade层,Facade层引用B层,所以U层里有B层的.dll文件】,引用的机制是:在本程序集有变化时会自动拷贝.dll)。于是乎我就手动的把D层的.dll文件复制到了U层下面,此时该问题以解决,但一运行又出现了另一个错:
刚才是我手动的把文件拖到另一个文件夹下的,此问题的解决办法是在D层的生成输出路径下,使用浏览把U层的.dll文件添加进去
反射:提供一种编程的方式,在程序运行期可获得NET的组成部分的相关内容,机房收费系统用反射的目的就是:翻遍更换数据库
这是在网上搜的一篇有关VB.NET的反射机制的理解:http://www.cnblogs.com/pangblog/archive/2013/08/22/3275579.html
反射还在研究。。。
【总结】
其实有时总是被问题吓倒了,就如一开始就搜到师哥的博客了,但没耐心看下去,就去搜别的方法了,结果可想而知,如果一开始我能耐心看下去,去我的文件夹下多点点,问题也就解决了。由此验证了老师的话:去做就行了,此问题要说去找就行了,也就是去做了。要想发现一个程序或应用的更多功能,去多点点就行了。如果你不想动脑袋,那你将会花费更多的时间。