在做 .NET Compact Framework 開發(fā)的過程中,特別是訪問 Web Service 的時(shí)候,常常會(huì)遇到這樣的異常信息:“無法找到資源程序集”或"Could not find resource assembly"。比較讓人納悶的是,明明是要訪問 Web Service,跟資源程序集有什么關(guān)系呢?為什么會(huì)用到資源程序集呢?什么是資源程序集呢?
被這個(gè)問題困擾了很久,現(xiàn)在終于解開了迷題。
這個(gè)異常信息是這樣產(chǎn)生的:在 .NET CF 應(yīng)用程序訪問 Web Service 的時(shí)候,程序因?yàn)槟撤N原因(如:訪問不到網(wǎng)絡(luò))要拋出一個(gè)異常,而這個(gè)異常的錯(cuò)誤信息要從字符串資源程序集中獲取(如:System.SR.dll),但是程序在GAC(全局程序集緩沖,在 "/Windows/" 目錄)和程序目錄(如:"/PRogram Files/SmartDeviceApp1")都找不到這個(gè)程序集,所以拋出了一個(gè)“無法找到資源程序集”或"Could not find resource assembly"的異常。說得直白一點(diǎn),就是程序在拋出一個(gè)異常的時(shí)候,又遇到錯(cuò)誤并拋出一個(gè)新的異常。所以我們看到的“無法找到資源程序集”的異常信息,并非是程序真正的錯(cuò)誤信息。
有些朋友就郁悶了,我的 Windows Mobile 5.0 明明安裝了(手工復(fù)制到設(shè)備上執(zhí)行并安裝或者在調(diào)試程序的時(shí)候自動(dòng)安裝)System_SR_CHS.cab(中文簡體的資源程序集安裝包),所以 System.SR.dll 和 System.SR.Resources.zh-CHS.dll 這兩個(gè)程序集應(yīng)該都已經(jīng)被安裝到 GAC 了,怎么程序還是找不到這兩個(gè)程序集呢?對于這個(gè)問題,很可能是 System.SR.dll 和 System.SR.Resources.zh-CHS.dll 這兩個(gè)程序集并沒有被成功安裝到 GAC。我們可以通過PC的資源管理器瀏覽設(shè)備的 "/Windows/" 目錄看個(gè)究竟。如果這兩個(gè)文件是按原來的文件名(即 "System.SR.dll" 和 "System.SR.Resources.zh-CHS.dll")存放在"/Windows/"目錄,那么證明它們沒有被成功安裝到GAC。安裝成功的話,它們的文件名應(yīng)該是類似 "GAC_System.SR_v1_0_5000_0_cneutral_1.dll" 和 "GAC_System.SR.resources_v1_0_5000_0_czh-CHS_1.dll"。
現(xiàn)在我們知道原因了,下面就介紹如何解決它。
比較保險(xiǎn)的做法是在智能設(shè)備項(xiàng)目中引用 System.SR.dll 這個(gè)程序集。在部署的時(shí)候,這個(gè)文件就會(huì)被復(fù)制到程序目錄,打包的時(shí)候文件會(huì)被包含在生成的CAB文件中。System.SR.dll 的文件大小是93.6KB,會(huì)增加不少智能設(shè)備應(yīng)用程序的存儲(chǔ)內(nèi)存空間。
新聞熱點(diǎn)
疑難解答
圖片精選