後來總結了下出現這個問題的原因:一、反射的呼叫**書寫錯誤;二、反射的載入路徑設定不正確。
反射的呼叫應該是:assembly.load("程式集").createinstance("命名空間類")
public class loginfactory
private shared readonly assemblyname as string = "dal" '資料庫程式集名稱,命名空間dal
public function createiuser() as loginiuserinfo
dim classname as string = "dal" + "." + strdb + "logindal" '需要例項化的d層的名稱
dim iuser as loginiuserinfo
'ctype 函式將返回表示式顯示的轉換為指定的資料型別、物件、結構、類或者介面後的結果
iuser = ctype(assembly.load(assemblyname).createinstance(classname), loginiuserinfo) '返回loginiuserinfo
return iuser
end function
end class
ps:上面**來自我的部落格《機房重構之七層登入》;其中的變數assemblyname即為所謂的程式集;classname即為所謂的命名空間類
因為反射的原理時需要引導程式集dll在ui層下的bin資料夾下的內容,所以在上面的**書寫問題中提到的程式集是需要讀取ui層(有關ui層請參考我的另一篇部落格《機房重構之七層登入》)資料夾bin中對應的dll;因此我們需要保證ui層bin資料夾下的路徑有需要的程式集的路徑才能讓程式順利執行。
反射的原理除了上面提到的一點,其他的還是很陌生,後續學習跟進;乙個錯誤,是一次痛苦,也是一次幸福。
—joker
未能載入檔案或程式集
不要做a位 修改為b位 的無用功。也不要做用a位 直接呼叫b位 庫這樣複雜 這樣容易出錯的傻事。只需讓a位 b位 的輸入輸出重定向到文字檔案,或修改a位 b位 讓其通過文字檔案輸入輸出。即可很方便地讓a位 b位兩種 之間協調工作。關於.net編譯的目標平台 anycpu,x86,x64 今天將呼叫s...
服務註冊問題 未能載入檔案和程式集
displayname是計算機管理 服務 顯示的名字,servicename是在使用 sc delete 服務名 的時候使用的服務名。使用 installutil命令來註冊服務,installutil c haha.exe,必須使用vs的命令列 如果路徑c haha.exe中有空格的話,需要在路徑兩...
c 未能載入檔案或程式集
dll檔名與載入時的dll檔名不一致,dll檔案根本不存在,即出現丟失情況,載入dll路徑錯誤,即dll檔案存在,但載入路徑不正確 程式集版本錯誤。我a.dll內部引用的b.dll是1.0版本,而實績提供的b.dll是2.0的版本,所以在winfrom設計介面就報了這個找不到依賴項的錯誤。主要原因是...