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

好的,執行一下就好了。
