未能加载文件或程序集“SqlServerDal”或它的某一个依赖项。系统找不到指定的文件。...
今天遇到一個挺怪的問題,采用了工廠模式后,出去找不到程序集的問題:
未能加載文件或程序集“Tianyige.SqlServerDAL”或它的某一個依賴項。系統找不到指定的文件。
解決思路:
以前遇到過這類問題,問題在于對程序集和命名空間名稱混淆了,比如:命名空間叫SQLServerDAL,而程序集可能叫“Tianyige.SQLServerDAL”,或者叫成“SqlServerDAL”,都會發生找不到對象的錯誤。解決方法是對應好程序集的名稱:
Assembly.Load("Tianyige.SqlServerDAL").CreateInstance("Tianyige.SqlServerDAL.Category");通過bin文件夾下找到相應的DLL,確定其名稱。
而這次名稱對應好了,看得我眼都花了,一點錯沒有,還是有問題。最后將錯誤提示中的文件的dll文件[Tianyige.SqlServerDAL]復制到網站APP下的bin目錄中,問題得以解決。
模仿pet shop4做了個工廠模式的簡單例子,初步了解其中流程,做個總結。
一、創建項目IDAL,包含若干接口如 IOrder,是有關Order的數據庫操作接口。
二、創建項目SQLServerDAL,其中包含一個Order類,繼承IOrder接口,具體實現該接口中聲明的若干函數。
三、創建項目DALFactory,就是一個數據庫接口工廠,負責根據選擇的數據庫類型(在web.config中獲取如<add key="WebDAL" value="SQLServerDAL"/>)來創建相應數據庫操作接口實例。如下述代碼:
??????? public static IOrder CreateOrder()
??????? {
??????????? string path = "SQLServerDAL";
??????????? string className = path + ".Index";
??????????? return (IOrder)Assembly.Load(path).CreateInstance(className);
??????? }
四、創建項目BLL,負責業務邏輯實現。其中需要調用數據庫操作函數的時候聲明
private static IOrder iOrder = DataAccess.CreateOrder();
然后調用IOrder中聲明(SQLServerDAL.Order類中定義)的函數。
上面就是一個基本的過程,其中需要注意幾點:
1、數據接口工廠DALFactory中CreateOrder函數聲明成static,其他有關的地方也要用static,因為此處是利用反射動態加載程序集,所以加載一次就夠了,網上偶然看了資料,據說即使多次執行加載語句也只會加載一次。
2、會出現“未能加載文件或程序集“SQLServerDAL”或它的某一個依賴項。系統找不到指定的文件”的情況。其實原因賊簡單,就是無法找到該程序集,主要是沒理解它運行的機制,其實如果
Assembly.Load(path).CreateInstance(className);
寫成
Assembly.Load(“SQLServerDAL.dll").CreateInstance(className);
就清楚了,這找的不是一個名稱空間,而是在bin里的一個dll文件。而項目SQLServerDAL默認生成的dll文件的名字是SQLServerDAL.dll,于是就會出現以上的錯誤。那么只要在該項目屬性里把程序集名稱改成“SQLServerDAL“就行了。
編程的路太長了,很多的基礎要打,太多的技術要學,快失去信心了!
轉載于:https://www.cnblogs.com/strivers/archive/2010/11/27/1889633.html
總結
以上是生活随笔為你收集整理的未能加载文件或程序集“SqlServerDal”或它的某一个依赖项。系统找不到指定的文件。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flash/Flex学习笔记(53):利
- 下一篇: [翻译]Global Descripto