微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

学习三层模式中遇到未能加载文件或程序集“Adtion.DAL.SqlServer”……”的原因和解析

仿照PetShop学习三层模式总结:

新建如下五个项目,他们的依赖关系如下:
1.        BLL             依赖于---Model,IDAL,DALFactory
2.        DALFactory      依赖于---IDAL,System.configuration
3.        IDAL            依赖于---Model
4.        DAL             依赖于---DBUtility,Model,IDAL
5.        Model           依赖于---无
6.        DBUtility       依赖于---System.configuration
7.        一个网站(文件系统)
也就是说要要这样子引用:BLL项目引用Model,DALFactory这几个项目

在新建项目时,项目属性中的程序集名称认命名空间要指定为要调用的命名空间,如在项目DAL中,右键点属性:

作如下设置:
才可以找到程序集,设置成下面的形式:

才能在DataFactory中这样子调用

   public   static  Adtion.IDAL.IStaff_Unit CreateStaffUnit()

        
{

            
//获取程序集的路径

            string path = ConfigurationManager.AppSettings["WebDAL"];//获取网站Web.config中<appSettings>配置节中名为“WebDAL”那一项的值)


            
// 获取要实例化的类的完整名字:命名空间+ ". "+ 类名(注意,因为我们设置了命名空间和程序集都是Adtion.DAL.sqlServer(见上图),所以才使用 程序集+ ". "+ 类名 )

           string className=path +".Staff_Unit";


            
//利用反射技术,动态加载指定类型(Assembly.load(path).CreateInstance (className)方法加载名为path的程序集,并创建在该程序集下在名字叫className的类的实例)

            return (Adtion.IDAL.IStaff_Unit)Assembly.Load(path).CreateInstance (className);

        }


 

    其中Web.config中<appSettings>配置节中的配置如下

<add key="WebDAL" value="Adtion.DAL.sqlServer"/>

如果大家配置好项目属性如图为所示,自然在执行Assembly.Load

(path).CreateInstance (className)方法是能执行通过:找到名为Adtion.DAL.sqlServer的程序集,实例化其中名为Adtion.DAL.sqlServer.Staff_Unit的类;

否则,会弹出“未能加载文件或程序集“Adtion.DAL.sqlServer”……”的错误信息

注:比如你的项目属性配置如下

虽然你的 Staff_Unit 类是这样写在命名空间Adtion.DAL.sqlServer:

namespace  Adtion.DAL.sqlServer

{

    
class Staff_Unit : IStaff_Unit

    
{

               

    }

}

也会报错:未能加载文件或程序集“Adtion.DAL.sqlServer”……”,因为如上图(第二个图)配置,这时你真正的程序集为"sqlSeverDAL",而不是配置文件中<add key="WebDAL" value="Adtion.DAL.sqlServer"/>的 Adtion.DAL.sqlServer。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐