這個錯誤是我在打包的時候。發現的,因爲我移動了個人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
首先利用此次機會,我想說說我對反射的理解:緩存
咱們使用反射,首先要清楚命名空間中幾個類的關係: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層。結果:
好的,執行一下就行了。