在做 .net compact framework 開發的過程中,特別是訪問 web service 的時候,常常會遇到這樣的異常信息:“無法找到資源程序集”或"could not find resource assembly"。比較讓人納悶的是,明明是要訪問 web service,跟資源程序集有什么關系呢?為什么會用到資源程序集呢?什么是資源程序集呢?
被這個問題困擾了很久,現在終于解開了迷題。
這個異常信息是這樣產生的:在 .net cf 應用程序訪問 web service 的時候,程序因為某種原因(如:訪問不到網絡)要拋出一個異常,而這個異常的錯誤信息要從字符串資源程序集中獲取(如:system.sr.dll),但是程序在gac(全局程序集緩沖,在 "/windows/" 目錄)和程序目錄(如:"/program files/smartdeviceapp1")都找不到這個程序集,所以拋出了一個“無法找到資源程序集”或"could not find resource assembly"的異常。說得直白一點,就是程序在拋出一個異常的時候,又遇到錯誤并拋出一個新的異常。所以我們看到的“無法找到資源程序集”的異常信息,并非是程序真正的錯誤信息。
有些朋友就郁悶了,我的 windows mobile 5.0 明明安裝了(手工復制到設備上執行并安裝或者在調試程序的時候自動安裝)system_sr_chs.cab(中文簡體的資源程序集安裝包),所以 system.sr.dll 和 system.sr.resources.zh-chs.dll 這兩個程序集應該都已經被安裝到 gac 了,怎么程序還是找不到這兩個程序集呢?對于這個問題,很可能是 system.sr.dll 和 system.sr.resources.zh-chs.dll 這兩個程序集并沒有被成功安裝到 gac。我們可以通過pc的資源管理器瀏覽設備的 "/windows/" 目錄看個究竟。如果這兩個文件是按原來的文件名(即 "system.sr.dll" 和 "system.sr.resources.zh-chs.dll")存放在"/windows/"目錄,那么證明它們沒有被成功安裝到gac。安裝成功的話,它們的文件名應該是類似 "gac_system.sr_v1_0_5000_0_cneutral_1.dll" 和 "gac_system.sr.resources_v1_0_5000_0_czh-chs_1.dll"。
現在我們知道原因了,下面就介紹如何解決它。
比較保險的做法是在智能設備項目中引用 system.sr.dll 這個程序集。在部署的時候,這個文件就會被復制到程序目錄,打包的時候文件會被包含在生成的cab文件中。system.sr.dll 的文件大小是93.6kb,會增加不少智能設備應用程序的存儲內存空間。
新聞熱點
疑難解答
圖片精選