Assembly.Load未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件

  项目采用了三层架构和工厂模式,并借鉴了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>
二、程序集名称和默认命名空间错误。
在各个程序集右键--属性,看看程序集名称和默认命名空间有没有写错。这个问题也可能导致如题的错误~~
第一次用反射,就出了这个问题,学到不少,还得加深对反射的理解(本文借鉴伟人的,用来方便自己学习,别无它意)

Assembly.Load未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件,布布扣,bubuko.com

时间: 2024-11-18 15:43:02

Assembly.Load未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件的相关文章

未能加载文件或程序集.....或它的某一个依赖项。试图加载格式不正确的程序。

错误提示:未能加载文件或程序集.....或它的某一个依赖项.试图加载格式不正确的程序.原因:操作系统是64位的,但发布的程序引用了一些32位的ddl,所以出现了兼容性的问题.解决方案一: 修改项目属性,将目标平台修改为X86.解决方案二: IIS中,将应用程序池的高级设置中的"启用32位应用程序"设置为true.未能加载文件或程序集.....或它的某一个依赖项.试图加载格式不正确的程序.

未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件

连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出了问题.上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样.最后在CSDN上发帖子问了,果然“重赏之下必有勇夫”,很快就有高手回复了,问题也随着解决了.哈哈.在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不到,我的电脑文件到处乱放,有时连我自己都找不到^_^. 问题是这样嘀: 项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这

C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集

Could not load file or assembly 'xxx.xxx.xxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044) 这个错误是原因:是有签名的DLL引用了无签名的DLL 解决办法: 就是清空引用的项目的签名

asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法

出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEntity.DLL的项目没有生成这个DLL的项目的签名*.snk 解决办法: 就是清空引用的项目的签名,这样大家都无签名,或者在引用的项目中生成一个签名,这样大家都有签名. 引用原则:有签名可以引用无签名或有签名的DLL.但无签名不可以引用有签名的DLL,会报需要强名称程序集错误.

未能加载文件或程序集 或它的某一个依赖项。试图加载格式不正确的程序。问题解决

在调用mcp2210_dll_m_dotnetv4_x86.dll时,出现上述问题,并且存在warning:There was a mismatch between the processor architecture of the project being build "MSIL" and the processor architecture of the reference "[internal C# dll]", "x86". 解决方法如

未能加载文件或程序集或它的某一个依赖项。参数不正确

删除 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary 文件夹下的所有文件后问题解决 http://www.cnblogs.com/xwgli/p/3617645.html http://www.cnblogs.com/dudu/archive/2013/02/08/2909464.html

未能加载文件或程序集“......”或它的某一个依赖项。系统找不到指定的文件。

C#(64位系统) 解决&quot;未能加载文件或程序集,或它的某一个依赖项...&quot;

这个问题通常出在引用第三方DLL或者自己以前写的DLL. 在64位系统下则可能会出现这种问题. 今天下载MySQLDriverCS后引用遍出现了这个问题,参考了一些文档,下面给出解决方法: 将项目的生成目标平台改为x86(默认Any cpu)就可以了. 因为原DLL是在32位(x86)平台下生成的,而程序却是x64的平台,所以需要更改下目标平台即可. 在项目的属性中,如图修改即可. 作者“Andrew's Blog”

能加载文件或程序集“XXX”或它的某一个依赖项,系统找不到指定的文件

能加载文件或程序集“XXX”或它的某一个依赖项,系统找不到指定的文件 http://blog.csdn.net/pplcheer/article/details/7796211 做项目总是遇到各种的问题,今天就出现了这个问题.我在项目中使用EXT控件,当我添加一个刷新按钮时,报出了一个“未能加载文件或程序集“Coolite.Ext.Web”或它的某一个依赖项”的问题,后来我就重新找到我的COOLITE安装文件,将相应的DLL文件重新加载了一遍,问题解决了. 下面是我结合我的问题,查的一些资料,供