机房重构所遇问题及解决办法集锦(一)

  敲七层登录的时候,忽然间觉得敲三层搞清的思路瞬间又凌乱了,花了一天的时间边敲边梳理,终于整完了,运行的时候弹出了这样的错误:未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。

机房重构所遇问题及解决办法集锦(一)_第1张图片

  “加载”二字引起了我的注意,但是我并不知道它的加载机制,于是便去询问度娘了,度娘首先说明了产生错误的原因:

       1、DLL文件名与加载时的DLL文件名不一致。
       2、DLL文件根本不存在,即出现丢失情况。
       3、加载DLL路径错误,即DLL文件存在,但加载路径不正确

  按照度娘给出的原因,我去检查了前两个问题,发现那不是我的项目报错的原因,于是将目光定格在了第三个问题上,可是加载路径是怎么回事呢?这便涉及到了反射的一个原则:一切皆以UI层的bin文件夹中的dll名称为中心。(原因很简单:.net类加载的机制就是默认从本程序集的bin文件中找,所以bin文件夹中一定要有要加载的程序集的dll)。【UI层中bin文件夹中要加载的程序集的dll叫什么名字AssemblyPath就使用什么名字,bin内部要加载的类的全名叫什么,className就写成什么全名。.net中的引用:加入对某个程序集的引用就能在程序集有变化时自动拷贝dll。】

  相信看了上文,即便不知道如何解决,也能知道解决问题的方向了。关于此问题的解决办法有两种,分别是:

  1、把DLL层的以DAL命名的文件复制到UI层的debug中。

  2、改变DAL层的生成输出路径。

  解决方案我们既然有了,能肯定的一点是,都能解决问题,但是论解决问题的长久性,还是第二种更好,为什么呢?

  按照第一种解决方案,运行程序,输入用户名和密码,系统真的会提示“恭喜你,登录成功!”,问题看似解决了,其实这并不是根本。把程序中的代码任意改错,重新运行还会提示“恭喜你,登录成功!”,这是怎么回事?打开UI层debug,发现除了DAL的dll文件的所有其他文件都是随着解决方案的生成而生成的,这么说直接拷贝是不行,治标不治本。

  这就引出了第二种解决问题的方案,改变DAl的生成输出路径,改为UI层的debug文件,再重新生成解决方案,文件的生成时间都一致了,运行就没有问题了。

  综上所述:我们解决问题的关键就在于让文件的生成时间一致,步调一致,运行无忧~

  文字要是看着太多,请原谅我让尊贵的读者大人遇到bug后急于找到解决办法的烦躁心情愈加凌乱,于是我决定“负图请罪”:


  上述问题解决后,为了让自己对7层的理解度加深些,我开始着手里边相对较小的功能——修改密码,就在我把代码敲完后,运行时出现了这样的问题——输入的原密码即便和当前用户的密码不一致,也能修改成功。

  关于修改密码功能,我的大概思路是这样的,先判断输入的原密码是否和当前用户的密码一致,然后再判断密码是否修改成功,然而出现了上述问题,我也很纳闷,这两条线的代码思路是一样的,代码实现大同小异,既然能够提示我修改成功,说明不是代码的问题,于是,我便对判断原密码那条线进行了分步调试,走到BLL层弹出这样一个错误——源文件与模块生成时的文件不同,指向了C:\Users\秋若枫\Desktop\机房重构七层V1.0——孙利楠\ChargeReBuild\DAL,然后询问我:仍要让调试器使用它吗?(PS:我哪知道?!)

  于是乎,我又投入了度娘的怀抱,找到了解决办法,首先打开自己的DAL层的文件夹,如下:

机房重构所遇问题及解决办法集锦(一)_第2张图片

  然后,删除如图所示的三个文件,重新生成解决方案。

机房重构所遇问题及解决办法集锦(一)_第3张图片

  最后,打开UI层,进行下图说明的操作。

机房重构所遇问题及解决办法集锦(一)_第4张图片

  当我完成上述操作后,再运行程序,如果原始密码输入错误,就会有相应的提示了~

  关于调试器调试的提示:工具-> 选项-> 调试-> 常规 ->把“要求源文件和版本匹配”的勾勾去掉->然后去掉“地址级的调试”的勾勾(这样就不会出现反汇编代码了,这一步可不要),然后重新引用。

  修改密码功能的实现,巩固了我敲登录时候的理解,对接下来的功能的实现,有点迫不及待了,系统,也是我们的small baby~



你可能感兴趣的:(修改密码,机房重构,源文件与模块生成时的文件不同)