public override IDAL.IRoomService CreateRoomService()
        {
            return (IDAL.IRoomService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoom"]);
        }        public override IDAL.IRoomTypeService CreateRoomTypeService()
        {
            return (IDAL.IRoomTypeService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoomType"]);
            
        }
如果这样写就报:未能加载文件或程序集 “DAL”或它的某一个依赖项。系统找不到指定的文件
但是如果其中任意一个方法不用工厂,直接new个对象,两个都不报错
是怎么回事啊!

解决方案 »

  1.   

    添加引用->项目 
    下面DAL的工程引用
      

  2.   

    你没看题!“
    但是如果其中任意一个方法不用工厂,直接new个对象,两个都不报错 
    是怎么回事啊!

      

  3.   

    是你工厂类里没有实力的方法吧,工厂里NEW和直接NEW都没搞清楚,工厂模式也是类,直接NEW一个类有什么奇怪的
      

  4.   

    反射要求在网站的Bin文件夹中有已经编译好的.DLL文件,并且保持名称和编译前类库的名称一致
      

  5.   


    我工厂用的反射报错,如果直接NEW个实例就可以,
    这样可以,不报错:
     public override IDAL.IRoomService CreateRoomService()
            {
                //return (IDAL.IRoomService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoom"]);
                return new DAL.MySql.RoomService();
            }        public override IDAL.IRoomTypeService CreateRoomTypeService()
            {
                return (IDAL.IRoomTypeService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoomType"]);
                
            }这样也可以,不报错:
    public override IDAL.IRoomService CreateRoomService()
            {
                return (IDAL.IRoomService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoom"]);
                return new DAL.MySql.RoomService();
            }        public override IDAL.IRoomTypeService CreateRoomTypeService()
            {
                //return (IDAL.IRoomTypeService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoomType"]);
    return new DAL.MySql.RoomTypeService();            
            }唯独两方法里都用反射取得对象时就报错了;bin路劲下面有dll文件的,我导了引用的
      

  6.   

    这样也可以,不报错: 
    public override IDAL.IRoomService CreateRoomService() 
            { 
                return (IDAL.IRoomService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoom"]); 
                //return new DAL.MySql.RoomService(); 
            }         public override IDAL.IRoomTypeService CreateRoomTypeService() 
            { 
                //return (IDAL.IRoomTypeService)Assembly.Load("DAL").CreateInstance(ConfigurationManager.AppSettings["sqlRoomType"]); 
    return new DAL.MySql.RoomTypeService();             
            } 唯独两方法里都用反射取得对象时就报错了; bin路劲下面有dll文件的,我导了引用的
      

  7.   

    错误描述:未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。文件不存在。 原因:1.在利用分层设计思想开发时,关于动态反射的理解不清晰。       2.由于开发工具的bug问题,造成未能加载程序集。 解决方案: 1.反射编程要求在网站的Bin文件夹中有已经编译好的.DLL文件(即保持DLL文件存在),并且保持名称和编译前类库的名称一致。可称:添加引用性。 2.查看网站中的项目(类库)属性,确认是否默认命名空间和程序集名称以及Bin文件夹下的DLL文件名称是否一致,不一致则会出现未能加载文件或者程序集,所以的修改项目的属性。可称:名称一致性。 3.建议在编程的时在创建类库的时候写上系统名称+项目名称,能够有效的避免Bug产出。即:SystemName.Model或者SystemName.IDAL。eg:BBS.Model。可称:名称完整性。 
      

  8.   

    还没结贴,还好,这个问题我是研究了半天,主要还是看资料的,终于解决了,许多人都说的有自己的理由,但是万事俱备只欠东风,
    Assembly.Load(path) 其中这个path是加载你项目web下bin目录的程序集,也就是说你要反射的程序集在你的web的bin下一定要有,看看你引用没有呢????
    时间没有白费,研究了几个小时
      

  9.   

    我Dal文件夹下bin里有Dal.dll,但是还是报错,为什么?
      

  10.   

    我也终于知道了,是缺少Dal.dll,它是UI文件夹下的bin里缺少,而不其它文件下的bin缺少,这一点很重要,总是有人说缺少.dll,但是不知道到底是哪个文件下才需要这个.dll;
    一定要把你的Dal.dll或AccessDal.dll放到UI\bin\Debug里,UI是我的界面
      

  11.   

    9楼是对的。可以看一下有没有dll文件。
      

  12.   

    这样说是不是每次生成之后都要把DAL和BLL啥的都拷贝过来,有没有解决方法