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层对象,未能加载文件或程序集......的更多相关文章

  1. 未能加载文件或程序集“DAL”或其他的某一个依赖项,系统找不到指定的文件

    针对这个问题我在敲VB.NET机房收费系统的时候总共出现了两次,第一次是在使用反射+抽象工厂的时候出现的,第二次是在使用VS2012自带的打包工具生成可执行文件执行exe文件的时候出现的.具体看下图: ...

  2. DALFactory出现"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .

    自己在使用抽象工厂+配置文件+反射实现重构机房的过程中,遇到了这种情况, 当初自己认真的检查了反射中的代码,都是没有问题,请教了师姐,检查了抽象工厂与反射的使用都没有问题 // 查找我们将要使用的数据 ...

  3. 简单架构:反射实现抽象工厂+IDAL接口完全独立DAL

    一.普通架构中存在的问题 StudentDB数据库,包含一张StudentInfoTB表,结构如下: s_id int primary key identity(1,1), s_name Nvarch ...

  4. 通过反射获取SSM的controller层的注解以及注解中的value值

    package com.reflection.test; import java.lang.annotation.Annotation; import java.lang.reflect.Invoca ...

  5. 通过反射获取父类泛型的Class对象 ParameterizedType

    ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0] 这个方法这么用啊,返回什么,请给 ...

  6. ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题

    想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...

  7. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

  8. 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)

    假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...

  9. vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂

    上一篇咱们做好了准备工作.数据库设计和Entity层,如今介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其有用起来非常easy.你就觉得他就是决 ...

随机推荐

  1. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  2. 最近学习了HBase

    HBase是什么 最近学习了HBase,正常来说写这篇文章,应该从DB有什么缺点,HBase如何弥补DB的缺点开始讲会更有体感,但是本文这些暂时不讲,只讲HBase,把HBase相关原理和使用讲清楚, ...

  3. springboot之mybatisplus,mp的简单理解

    这是一张简单的service的继承图.可以看到我们的执行类,即XxxServiceImpl的继承关系. 从上到下,ServiceImpl和BaseMapper是一个依赖关系,ServiceImpl和I ...

  4. 每日一问:View.getContext() 的返回一定是 Activity 么?

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 一般我们被问到这样的问题,通常来说,答案都是否定的,但一定得知道其中的原 ...

  5. php编写刷网课自助下单系统(第三方支付实例)

    此项目是由于本人刚刚入门php且在校代刷网课而编写的,由于在上课时间不方便接单,故特意写一个自助下单系统来实现客户自助下单.本项目主要实现以下功能:1.用户下单2.用户支付3.用户通过账号查询订单4. ...

  6. NFS存储服务及部署

    1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服 ...

  7. vue-cli安装搭建初始项目

    vue-cli脚手架 前提:node + npm 安装好 一.介绍 vue-cli: Vue + ESLint + webpack + iview + ES6 Vue:主要框架ESLint:帮助我们检 ...

  8. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver

    大家一谈数据库,就觉得非常高深莫测,深不见底,非凡人敢去触摸.但Excel的话,没人敢说自己不会使用吧(相反一大堆人的简历上写着精通OFFICE所有软件套件).换作其他非微软厂商的数据库,的确很容易产 ...

  9. 百度OCR文字识别API使用心得===com.baidu.ocr.sdk.exception.SDKError[283604]

    异常com.baidu.ocr.sdk.exception.SDKError[283604]App identifier unmatch.错误的packname或bundleId.logId::303 ...

  10. SCADA开源项目lite版本

    一.引子 自从看了老坏猫(江湖人称猫总)的SharpSCADA项目后,让我感觉耳目一新同时也对自动化数据采集有了更深入的认识,我相信有不少做上位机的朋友和我一样对这个项目非常好奇.我们做上位机的应用场 ...