使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......
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层对象,未能加载文件或程序集......的更多相关文章
- 未能加载文件或程序集“DAL”或其他的某一个依赖项,系统找不到指定的文件
针对这个问题我在敲VB.NET机房收费系统的时候总共出现了两次,第一次是在使用反射+抽象工厂的时候出现的,第二次是在使用VS2012自带的打包工具生成可执行文件执行exe文件的时候出现的.具体看下图: ...
- DALFactory出现"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .
自己在使用抽象工厂+配置文件+反射实现重构机房的过程中,遇到了这种情况, 当初自己认真的检查了反射中的代码,都是没有问题,请教了师姐,检查了抽象工厂与反射的使用都没有问题 // 查找我们将要使用的数据 ...
- 简单架构:反射实现抽象工厂+IDAL接口完全独立DAL
一.普通架构中存在的问题 StudentDB数据库,包含一张StudentInfoTB表,结构如下: s_id int primary key identity(1,1), s_name Nvarch ...
- 通过反射获取SSM的controller层的注解以及注解中的value值
package com.reflection.test; import java.lang.annotation.Annotation; import java.lang.reflect.Invoca ...
- 通过反射获取父类泛型的Class对象 ParameterizedType
((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0] 这个方法这么用啊,返回什么,请给 ...
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)
假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...
- vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂
上一篇咱们做好了准备工作.数据库设计和Entity层,如今介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其有用起来非常easy.你就觉得他就是决 ...
随机推荐
- 大数据虚拟混算平台Moonbox配置指南
一.环境准备 已安装Apache Spark 2.2.0(此版本仅支持Apache Spark 2.2.0, 其他Spark 版本后续会兼容) 已安装MySQL并启动,且开启远程访问 各安装节点已经配 ...
- 在CentOS7下搭建Hadoop2.9.0集群
系统环境:CentOS 7 JDK版本:jdk-8u191-linux-x64 MYSQL版本:5.7.26 Hadoop版本:2.9.0 Hive版本:2.3.4 Host Name Ip User ...
- ECharts 地图绘制与钻取简易接口
1.地图绘制过程原理 给定范围边界经纬度数据,再给它个名字就构成了绘制地图的基础.也就是说,你可以绘制任意形状的地图版块. 2.地图数据生成 中国以及省市县等地图的基础数据可以从这里生成与下载. ht ...
- jquery 动态 新增 元素 绑定事件
在jquery1.7以前使用live方法进行绑定,由于年代久远,这里就不介绍了. 在jquery1.7以后我们使用的on方法,这里需要注意的一点就是:如果想让动态生成的元素,都绑上事件,on前面的选择 ...
- js实现使用文件流下载csv文件
1. 理解Blob对象 在Blob对象出现之前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,我们就可以使用它操作二进制数据了.现在我们开始来理解下Bolb对象及它的 ...
- webpack-dev-server 小记 原理介绍 概念解读
使用 DevServer 提供 HTTP 服务而不是使用本地文件预览 监听文件的变化并自动刷新网页,做到实时预览 支持 Source Map,以方便调试 对于这些,Webpack 都为我们考虑好了.W ...
- LINUX_记录(一)
我有了一台电脑,有好多的硬件,CPU啊.内存啊.光驱啊.硬盘啊等等,我不想装windows,我想装linux,我就装了一个linux.事实上,可以跑,没问题,我在思考,why? 我装的linux,包括 ...
- 一些ServiceFabric、Orleans、Asp.net Aore的例子
Sample: ServiceFabric + Orleans + Asp.net Core : Asp.net Core 142 samples for ASP.NET Core 2.1 funda ...
- 用MATLB仿真一个单闭环控制量,同时还存在两个开环控制变量的阶跃响应曲线。(自动控制方法是PID中的P控制。通过查表法直接给开环参数稳态最佳的大小)
实际项目背景:甘肃省,航天510所的LIPS100电推力器.一共有三个控制变量,开环控制变量是:Ia(阳极电流).mmrf(阳极主流率) 这个阳极主流率是阀门变量,不能够突变,模拟用(大学一年级课,电 ...
- C++小游戏——井字棋
#include<cstdio> #include<windows.h> #include<ctime> int main() { srand(time(NULL) ...