[c#.net]未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件
问题是这样嘀:
项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这个项目也是采用分布式的数据库,目前只有三个数据库,主要出于提高访问性能考虑。
原来是按照网上对PetShop的介绍来给各项目添加引用的。
1、Web 引用 BLL。
2、BLL 引用 IDAL,Model,使用DALFactory创建实例。
3、IDAL 引用 Model。
在编程中,使用反射(IoC)是一个很好的架构。在.Net中,System.Reflection命名空间提供了对反射的支持。然而,很多朋友在使用Assembly.Load()方法时,却不能正确装载程序集。比如,很多朋友在模仿PetShop的框架时,使用这样的调用方式:
string assemblyName = ConfigurationManager.AppSettings["webDAL"];
string constructor = ConfigurationManager.AppSettings["constructorClass"];
return (IExample)Assembly.Load(assemblyName).CreateInstance(constructor, false);
然而,在Assembly.Load()方法处,经常出现未能加载程序集的错误:
未能加载文件或程序集“webDAL”或它的某一个依赖项。系统找不到指定的文件
Assembly.Load(assemblyName)实际上是在assemblyName.dll文件中查找类custructor的定义。例如,Assembly.Load("PetShop.SQLServerDAL").CreateInstance("PetShop.SQLServerDAL.Cateogry"),就是在PetShop.SQLServerDAL.dll程序集中查找PetShop.SQLServerDAL.Category类。而在自己定义类库时,往往忽视了生成的程序集的名称。
在类库项目上点击右键->属性,可以设定生成的程序集的文件名。只有正确设置了,才能在Assembly.Load(assemblyName)方法中避免找不到程序集的错误。
错误描述:未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。文件不存在。
原因:1.在利用分层设计思想开发时,关于动态反射的理解不清晰。
2.由于开发工具的bug问题,造成未能加载程序集。
解决方案:
1.反射编程要求在网站的Bin文件夹中有已经编译好的.DLL文件(即保持DLL文件存在),并且保持名称和编译前类库的名称一致。可称:添加引用性。
2.查看网站中的项目(类库)属性,确认是否默认命名空间和程序集名称以及Bin文件夹下的DLL文件名称是否一致,不一致则会出现未能加载文件或者程序集,所以的修改项目的属性。可称:名称一致性。
3.建议在编程的时在创建类库的时候写上系统名称+项目名称,能够有效的避免Bug产出。即:SystemName.Model或者SystemName.IDAL。eg:BBS.Model。可称:名称完整性。
Assembly.Load(path) 其中这个path是加载你项目web下bin目录的程序集,也就是说你要反射的程序集在你的web的bin下一定要有,看看你引用没有呢????
4、Model 无引用。
5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。
6、SQLServerDAL 引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。
问题就出在这里了。顶!
按照PetShop的架构,是DALFactory程序集里通过反射创建针对特定数据访问层里的对应类实例,这样BLL调用接口时就知道调用这个对应类实例里的实现方法。
而反射动态加载程序集是通过这种方法 Assembly.Load("程序集").CreateInstance("命名空间.类"),其中的“程序集”读取的是Web层bin文件夹下对应的dll,即反射加载的程序集dll在Web层的bin文件夹必须有,不然就会出现如题的错误。问题解决了~^_^
出现这种错误的另两种情况,这也是在网上看到的,一起写下来。
一、Web.config配置错误。
在DALFactory程序集里的DataAccess类里,通过
private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
来获得程序集的名称的。
在Web.config里我的配置如下:
<appSettings>
<add key="WebDAL" value="PDMS.SQLServerDAL"/>
</appSettings>
二、程序集名称和默认命名空间错误。
在各个程序集右键--属性,看看程序集名称和默认命名空间有没有写错。这个问题也可能导致如题的错误~~
第一次用反射,就出了这个问题,学到不少,还得加深对反射的理解^_^
[c#.net]未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件的更多相关文章
- asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法
asp.net C# 未能加载文件或程序集或它的某一个依赖项.需要强名称程序集.的解决办法 出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEnt ...
- Newtonsoft.Json报错:未能加载文件或程序集"..."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
Newtonsoft.Json报错:未能加载文件或程序集"..."或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配. □ 背景分析 在帮助类库中使用了Newtonso ...
- Mapxtreme 在64位系统运行网站,提示未能加载文件或程序集,或它的某一个依赖项
在32位系统上开发的网站,现在需要布署到64位系统上运行,布署好后访问提示提示未能加载文件或程序集,或它的某一个依赖项.在网上搜索后,发现是64位下引用dll出现的这个问题.这个问题通常出在引用第三方 ...
- IIS--解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项。试图加载
解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项.试图加载 ASP.NET MVC 项目发布的在本地IIS后,启动网站出现未能加载文件或程序集“…”或它的某一个依赖项. ...
- VS单元测试"未能加载文件或程序集,或它的某一个依赖项"
Autofac.Core.DependencyResolutionException : An error occurred during the activation of a particular ...
- 未能加载文件或程序集“***”或它的某一个依赖项,拒绝访问 <解决方法>
报错信息如下: 注:为了部分隐私安全需要,已将有问题文件名替换为filename,系统win2008R2,Microsoft .NET Framework 版本:4.0.30319; ASP.NET ...
- System.BadImageFormatException: 未能加载文件或程序集""或它的某一个依赖项。试图加载格式不正确的程序。
解决方法: 1.更改程序集的生成目标平台为[Any CPU],或者针对平台进行编译. 项目右键->[属性]->[生成]->[生成目标平台] 2.尝试一下修改线程池设置为32位支持.
- C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集
Could not load file or assembly 'xxx.xxx.xxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ...
- Web发布 未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的...
因为
随机推荐
- 廖雪峰Java7处理日期和时间-2Data和Calendar-1Date
计算机中如何存储和表示日期和时间 Epoch Time:从1970年1月1日零点(格林威治时区/GMT+00:00)到现在经历的秒数,也叫timestamp, 例如: 秒级: * 北京 2016-11 ...
- MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(一)
准备服务器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileged -v `pwd`/my ...
- 消息对话框 MessageBoxButtons
消息对话框MessageBox经常用于向用户显示通知信息.例如,在操作过程中遇到错误或程序异常,经常会使用这种方式给用户以提示,它是特殊类型的对话框. 在C#中,MessageBox消息对话框位于Sy ...
- Java内存泄漏的几种可能
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周期的对象持有短生命周期对象的引用就很可能发 ...
- uva-10602-贪心
题意:有个编辑器,支持三种操作,摁下一个键盘上的字符,重复最后一个单词,删除最后一个字符.给N个字符串,必须先在编辑器内输入第一个字符, 问,输入完所有字符串最少需要摁下多少次键盘. 最多100个字符 ...
- go相关知识点
后续开发go相关, 环境搭建 go env //查看环境所有 go只有三种引用类型 slice(切片). map(字典). channel(管道): go的类型的浅记忆 4仲类型bool,字符串,数字 ...
- 给tomcat配置外部资源路径(应用场景:web项目访问图片视频等资源)
对于一个web项目来说,除了文字之外,图片,视频等媒体元素也是其重要的组成部分.我们知道,web项目中如果用到大量的图片.视屏的资源,我们 通常的做法是只在数据库中存储图片.视频等资源的路径,web项 ...
- 关于https不支持http的解决方案
由于在写md的时候截图是用的微博的图床,上传到github才发现不让在其他网站使用,所有本文只有一张图片. 刚才进行网站测试的时候,微博秀这个插件不能显示出来,一直是空白, 然后我把本地域名改成了12 ...
- 3、支付结果 /items/result?point=1&orderNo=201903211035400001
<template> <div> <div class="toppic"> <img src="../../../assets/ ...
- OpenStack 安装:基本环境准备
刚刚学完openstack,这几篇文章就算对过去课程的一个总结吧. 首先说说基本的结构:在一台Dell的workstation上面安装了VMware,在VMware上面安装两台CentOS,现在给每台 ...