“System.IO.FileNotFoundException”类型的未经处理的异常在 mscorlib.dll 中发生

        这个错误是我在打包的时候。发现的,因为我移动了个人project的位置(从C盘移动到了D盘),看一下出错的代码:web

    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DBUser")    '这里改动配置文件就可以肯定是查询那个表了。
    '/// <summary>
    '/// depiction:<实例化一个DAL中的User表的类>
    '/// </summary>
    '/// <param name="<參数名称>"><參数说明></param>
    '/// <returns>
    '///<返回值是一个boolean值>
    '/// </returns>
    Public Function CreateUserInfo() As IDAL.IUser
        Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & strDB), IUser)
    End Function

            上面strDB的值是从配置文件里取出来的,我的以为,只我的以为配置文件就是一个变量库。而不把这个变量写在代码中是因为配置文件是在系统执行的时候,就会将里面的值载入出来。

         首先利用此次机会,我想说说我对反射的理解:缓存

         咱们使用反射,首先要清楚命名空间中几个类的关系:post

         System.Reflection 命名空间spa

        (1)AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器设计

        (2)Assembly:程序集类code

        (3) Module:模块类blog

        (4)Type:使用反射获得类型信息的最核心的类ip


        他们之间是AppDomain可以包括多个Assembly,一个Assembly可以包括多个Module,一个Module可以包括多个Type.it

         在咱们设计的机房收费系统中,上面的代码就是咱们动态载入一个程序集(Assembly)。动态载入程序集的方法可以使用三种:Load。LoadFrom和LoadWithPartialName三个Assembly的静态方法。io


         显然咱们用的是第一种。

Assembly.Load(),这种方法载入程序集的顺序是:首先它回去全局程序集缓存查找。再到应用程序的根文件夹查找,最后在应用程序的私有路径中查找。

         Assembly.Load("")的使用说明例如如下;   
        并不是命名空间。常常使用的是程序集名称,也就是dll的名称   
        重载列表     
        名称     说明       
        Assembly.Load   (AssemblyName)     在给定程序集的   AssemblyName   的状况下,载入程序集。    
 
       关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
       而不管在哪一层写这段代码当中的("程序集")读取的实际是web层bin目录下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有。
       Assembly.Load("程序集名")

      在看咱们的代码:程序集名为"DAL"(DAL为个人D层的文件包),直接上图你们看的更清楚:

 

     你们可以看到在个人UI层(Web层)根本就没有DAL.dll文件,有的话依照字母排列应该在红线处。因此。咱们就到DAL层(DAL\bin\release)将DAL.dll相关文件拷到Web层。结果:


      好的,执行一下就行了。

相关文章
相关标签/搜索