善待自己,珍惜今天,恩泽他人,享受生活

不放弃任何解决困难的机会,人的一生就是解决困难的过程。 当我们走完一生才能说没有问题要解决了。 面对工作、生活上的压力,面对来自家庭、朋友、同事、上司等的困惑。 要排除万难,否则我们就会被万难排除!

博客园 首页 新随笔 联系 订阅 管理

在windows mobile中访问web service时出现以下错误:

System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集
---> System.Net.Sockets.SocketException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集
位于 System.Net.Sockets.Socket.ConnectNoCheck()
位于 System.Net.Sockets.Socket.Connect()
位于 System.Net.Connection.doConnect()
位于 System.Net.Connection.connect()
at WorkItem.doWork()
位于 System.Threading.Timer.ring()

--------------------------------------
在做 .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,会增加不少智能设备应用程序的存储内存空间。


注:System.SR.dll需用WinCE CAB Manager从以下目录的System_SR_CHS_wm.cab中提取;

在:
C:/Program Files/Microsoft.NET/SDK/CompactFramework/v2.0/WindowsCE/Diagnostics

C:/Program Files/Microsoft Visual Studio 8/SmartDevices/SDK/CompactFramework/2.0/v2.0/WindowsCE/Diagnostics
目录下的cab文件中,可以用WinRAR解压缩出来,或者利用WinCE CAB Manager提取。


但有些时候添加了System.SR.dll也还是出现一样的提示,有人在CF3.5环境下装了NETCFv35.Messages.zh-CHS.wm.cab,后错误信息才正常。

posted on 2012-02-23 08:40  笨笨丁  阅读(1158)  评论(0编辑  收藏  举报