DataAccess类namespace AutoXL.DALFactory
{
    /// <summary>
    /// 此类用于实现抽象工厂模式去创建从配置文件指定的数据访问层的实例
    /// </summary>
    public sealed class DataAccess
    {       
        /// <summary>
        /// 创建Brand实例
        /// </summary>
        /// <returns></returns>
        public static IDAL.IBrand CreateBrand() {
            return (AutoXL.IDAL.IBrand)AutoXL.ServiceLocator.ServiceLoc.LocalDAL("Brand");            
        }
     }
ServiceLoc类namespace AutoXL.ServiceLocator
{
    /// <summary>
    /// 通过ServiceLocator,将所有与配置文件相关的namespace值统一管理起来,这有利于各种动态创建对象的管理和未来的维护
    /// </summary>
    public static class ServiceLoc
    {
        // 查找我们将要使用的数据访问层
        private static readonly string dalPath = "AutoXL.SQLServerDAL";// ConfigurationSettings.AppSettings["DataBaseLoc"];
        public static object LocalDAL(string className){
            string fullPath = dalPath + "." + className;
            //AutoXL.SQLServerDAL.Brand br = new AutoXL.SQLServerDAL.Brand();
            Assembly am = Assembly.Load(dalPath);
            return am.CreateInstance(fullPath);
        }
    }
}当我运行上面代码时,报以下错误:
未能加载文件或程序集“AutoXL.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。 
当我把上面程序中ServiceLoc类的//AutoXL.SQLServerDAL.Brand br = new AutoXL.SQLServerDAL.Brand();这行代码去掉注释后,运行就正常了。。我开始怀疑是可能没有添加相应的引用,但是,AutoXL.SQLServerDAL.Brand br = new AutoXL.SQLServerDAL.Brand() 这句话写出来了,也没有发现他会报错。到底是什么问题呢?

解决方案 »

  1.   

    你的AutoXL.SQLServerDAL.Brand文件和当前程序集不在一个目录。
    将AutoXL.SQLServerDAL.Brand拷贝到运行目录Assembly.Load 就能正常运行了
      

  2.   


    我在项目对应的文件夹中没有找到.exe文件所在的目录。。
      

  3.   

    你项目文件夹下面bin目录下面项目名.exe目录
      

  4.   

    LZ请阅读这帖子:http://topic.csdn.net/u/20090316/09/1035af53-8229-4123-8518-3e02f48c9c83.html还有就是查看你的Web目录下的bin目录是否存在SQLServerDAL.dll以及AutoXL.OracleDAL.pdb。