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

来源:互联网 发布:it公司市值排名 编辑:程序博客网 时间:2024/06/05 02:30

asp.net写的工厂模式架构web项目

利用反射工厂,动态生成程序集

其实错误原因还是在创建工厂模式,利用System.Configuration动态反射,对动态反射的理解不够清晰,造成这个错误

项目创建好,生成解决方案,全部成功,但是弹出:

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

很是奇怪
网上搜索了一下,很多人遇到这样的问题

命名空间SQLServerDAL,要与Web.config配置的名称相同
<appSettings file="Membership.config">    <add key="WebDAL" value="SQLServerDAL"/>    <add key="ConnectionString" value="user id=sa;password=123;Data Source=.;Initial Catalog=tb"></add>  </appSettings>

如果不一致运行会出现上述错误
我在DALFactory内创建的反射代码
public class DataAccess    {        // 查找程序集        private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];        private DataAccess() { }        public static IHc Hc()               {            string className = path + ".Hc";            return (IHc)Assembly.Load(path).CreateInstance(className);        }    }

还有一种是抽象一个泛型接口方法
public class ODataAccess<T>// 创建泛型程序集,泛型接口,复用性强省去很多重复代码    {        private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];        public static T Get()        {            string className = path + "." + typeof(T).Name.Substring(1);            object objType = Assembly.Load(path).CreateInstance(className);            return (T)objType;        }    }

解决方法是对应好程序集的名称:Assembly.Load(“SQLServerDAL.dll").CreateInstance(className);通过bin文件夹下找到相应的DLL,确定其名称。

上述两个反射代码均是正确的。
只是
我程序出现的这个错误是因为我的UI层没有bin文件夹,需要建立bin文件夹,添加项目引用。把项目引用添加后,运行成功。