“System.IO.FileNotFoundException”類型的未經處理的異常在 mscorlib.dll 中發生


        這個錯誤是我在打包的時候。發現的,由於我移動了我的project的位置(從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層。結果:


      好的,執行一下就好了。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM