「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層。結果:


      好的,執行一下就行了。

相關文章
相關標籤/搜索