連續兩天都為這個運行時錯誤“類型初始值設定項引發異常”而煩惱,調試也不知道哪里出了問題。上網Google一下,一大堆相同的問題,可是按照那些方法折騰來折騰去,問題還是一樣。最后在CSDN上發帖子問了,果然“重賞之下必有勇夫”,很快就有高手回復了,問題也隨着解決了。哈哈。在此寫個隨筆,以后如果大家遇到類似問題,也可參考一下,自己也做個備忘,不然放在電腦上,又找不到,我的電腦文件到處亂放,有時連我自己都找不到^_^。
問題是這樣嘀:
項目采用了三層架構和工廠模式,並借鑒了PetShop的架構,因為這個項目也是采用分布式的數據庫,目前只有三個數據庫,主要出於提高訪問性能考慮。
原來是按照網上對PetShop的介紹來給各項目添加引用的。
1、Web 引用 BLL。
2、BLL 引用 IDAL,Model,使用DALFactory創建實例。
3、IDAL 引用 Model。
4、Model 無引用。
5、DALFactory 引用IDAL,通過讀取web.config里設置的程序集,加載類的實例,返回給BLL使用。
6、SQLServerDAL 引用 Model和IDAL,被DALFactory加載的程序集,實現接口里的方法。
問題就出在這里了。頂!
按照PetShop的架構,是DALFactory程序集里通過反射創建針對特定數據訪問層里的對應類實例,這樣BLL調用接口時就知道調用這個對應類實例里的實現方法。
而反射動態加載程序集是通過這種方法 Assembly.Load("程序集").CreateInstance("命名空間.類"),其中的“程序集”讀取的是Web層bin文件夾下對應的dll,即反射加載的程序集dll在Web層的bin文件夾必須有,不然就會出現如題的錯誤。問題解決了~^_^
出現這種錯誤的另兩種情況,這也是在網上看到的,一起寫下來。
一、Web.config配置錯誤。
在DALFactory程序集里的DataAccess類里,通過
private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
來獲得程序集的名稱的。
在Web.config里我的配置如下:
<appSettings>
<add key="WebDAL" value="PDMS.SQLServerDAL"/>
</appSettings>
二、程序集名稱和默認命名空間錯誤。
在各個程序集右鍵--屬性,看看程序集名稱和默認命名空間有沒有寫錯。這個問題也可能導致如題的錯誤~~
引用:http://www.cnblogs.com/bluecountry/archive/2009/02/15/1390936.html