码迷,mamicode.com
首页 > 其他好文 > 详细

使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......

时间:2019-08-10 14:29:42      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:文件的   图片   百度   未能加载文件   思考   code   ESS   tor   bug   

 Put aside the fog and see the essence

技术图片

解决问题之前,要明白问题为什么会出现

如果只想单纯的解决这个问题的话,直接把错误复制然后百度就会出现很多很多解决方案

如果你想明白为什么会出现这个错误

 

1、首先了解反射的机制

任何类库编译完成之后都会生成.dll文件,反射就是从当前反射所在的.dll(DBZQ.Answer.Factory.dll)文件查找.dll

2、我们来看一下程序的代码和文件

web.config

技术图片

DalFacoty代码

技术图片

我们找到web层的bin目录下,查看一下所有的程序集

技术图片

 很容易就会看出来,web下的bin目录并没有DBZQ.Answer.Dal.dll

3、为什么没有DBZQ.Answer.Dal.dll?

我们可以发现web/bin下有很多dll文件,就是没有DBZQ.Answer.Dal.dll文件

为什么?

我们先看看程序中有多少层

 技术图片

然后和dll文件仔细对比一下,发现只有9个dll文件,少了两个(DBZQ.Answer.Test和DBZQ.Answer.Dal)

DBZQ.Answer.Test只是我平时写项目时做测试用的,没有任何层调用了Test层,会不会和引用有关系?

然后我们仔细理一下调用关系

技术图片

不难发现,web层无论是直接还是间接,都引用了所有层,除了Dal层,这是我们就可以大胆的猜测,可能是引用的关系

会心一笑,这有何难?接下来我就做了一件事

技术图片

 

技术图片

然后重新生成解决方案,打开web/bin

 技术图片

嗯~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~????????

看来事情并没有我想的这么简单,还是没有DBZQ.Answer.Dal.dll

呐,为什么其他的层被web层间接引用了可以出现.dll文件??而dal层不行

既然间接引用不行那我们直接引用试一下,先取消Factory层对Dal层的引用

技术图片

重新生成解决方案

 技术图片

看来还是老大的引用最顶用

那这是为什么呢?为什么间接引用又不行了呢?

 仔细思考之下我想到了一个问题,就是我其他的间接引用都是真正的要引用,因为我要用到其他层的函数所以我要引用

并不只是添加一个引用,而是引用加调用

那我们再来尝试一下,先取消web层对dal层的引用

然后同样是工厂类,添加对Dal层的引用,重新生成解决方案

技术图片

ok,不存在,我们尝试着在DalFactory中声明一个Dal层的对象试一下

技术图片

重新生成解决方案!!!

技术图片

果然出现了

看来这个就是编译机制的问题,如果是直接引用,所引用的dll文件会直接出现在bin目录下,

如果是间接引用,必须要有明确的调用代码,才会将dll文件添加到bin文件加的目录下,

接下来说一下问题最开始的解决方案,就是缺少dll文件造成的

1、右键dal层,属性-->生成-->输出路径 改为web/bin

2、将dal/bin/debug下的dll文件和pdb文件复制到web/bin

3、web直接添加对dll文件的引用(因为层和层之间的调用关系原因、我个人感觉不太好,仅仅只是个人感觉)

虽然只是一个小问题,百度一搜也很快可以解决,但是我还是想说一句

解决问题要明白问题为什么会出现,只有不断的探索才能成长

 

使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......

标签:文件的   图片   百度   未能加载文件   思考   code   ESS   tor   bug   

原文地址:https://www.cnblogs.com/ckka/p/11331037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!