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

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

    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的值是从配置文件中取出来的,个人认为,仅仅个人认为配置文件就是一个变量库,而不把这个变量写在代码中是因为配置文件是在系统运行的时候,就会将里面的值加载出来。

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

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

         System.Reflection 命名空间

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

        (2)Assembly:程序集类

        (3) Module:模块类

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


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

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


         显然我们用的是第一种。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层,结果:


      好的,运行一下就好了。

 

************** 异常文本 ************** System.IO.FileNotFoundException: 未能加载文件或程序集“System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。 文件名:“System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ---> System.IO.FileNotFoundException: 未能加载文件或程序集“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。 文件名:“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” === 预绑定状态信息 === 日志: DisplayName = System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 (Fully-specified) 日志: Appbase = file:///D:/Ruijie/office2/ 日志: 初始 PrivatePath = NULL 调用程序集: System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139。 === 日志: 此绑定从 default 加载上下文开始。 日志: 未找到应用程序配置文件。 日志: 使用主机配置文件: 日志: 使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的计算机配置文件。 日志: 在框架配置中找到版本重定向: 2.0.0.0 已重定向到 4.0.0.0。 日志: 策略后引用: System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 日志: 尝试下载新的 URL file:///D:/Ruijie/office2/System.Data.DLL。 日志: 尝试下载新的 URL file:///D:/Ruijie/office2/System.Data/System.Data.DLL。 日志: 尝试下载新的 URL file:///D:/Ruijie/office2/System.Data.EXE。 日志: 尝试下载新的 URL file:///D:/Ruijie/office2/System.Data/System.Data.EXE。 在 xhktoffice2010.Form_Main.LoadSkinData(Int32 softId) 在 xhktoffice2010.Form_Main..ctor(Int32 m_xiufucishu, Int32 softid, String newdate, Int32 ggCount, String link1, String link2, String url1, String url2) 在 xhktoffice2010.loadForm.start() 在 xhktoffice2010.loadForm.wtwiT3wj6ra(Object , EventArgs ) 在 System.Windows.Forms.Timer.OnTick(EventArgs e) 在 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** 已加载的程序集 ************** mscorlib 程序集版本:4.0.0.0 Win32 版本:4.8.9290.0 built by: NET481REL1LAST_C 基本代码:fil
最新发布
03-29
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值