System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集
2012-02-23 08:40
267 查看
在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,后错误信息才正常。
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,后错误信息才正常。
相关文章推荐
- System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集
- 在研发时出现运行时错误System.ArgumentException无法在类中找到资源
- 针对此异常的错误消息可用但无法显示,原因是这些消息是可选的......
- 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定区域性的资源。请确保在编译时已将“****.****.Resource.resources”正确嵌入或链接到程序集"****",或者确保所有需要的附属程序集都可加载并已进行了完全签名
- System.Runtime.Serialization.SerializationException: 无法找到程序集!
- Visual Staudio.net 2003脚本 无法找到脚本库"/aspnet_client/system_web/1_1_4322/webUIValidation.js".
- Asp.net错误“System.Web.HttpException: 超过了最大请求长度”解决办法
- 当您尝试查看 Web 页作为宿主的 IIS 6.0 上时出现错误消息: 页面无法显示"
- C# post数据时 出现如下错误: System.Net.WebException: 操作超时
- System.Web.HttpException: 无法在发送 HTTP 标头之后进行重定向的错误??
- VS2010调试错误 “未能找到任何适合于指定的区域性或非特定区域性的资源”“System.Resources.MissingManifestResourceException”
- Asp.NET MVC 之 调试访问 webservice 时出现“ 无法找到资源 ”的错误
- 编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Helpers”(是否缺少程序集引用?)
- C# post数据时 出现如下错误: System.Net.WebException: 操作超时
- Asp.net错误“System.Web.HttpException: 超过了最大请求长度”解决办法
- 编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
- 引用原因.NET下编译C++代码时出现fatal error C1083: 无法打开包含文件:“iostream.h”: No such file or directory错误的解决方法.
- 关于“无法找到资源程序集”错误
- 资源文件显示错误都可以从编绎资源文件的临时文件中找到原因
- 无法在Web服务器上启动调试."System.Net.DigestClient"的类型初始值设定项引发异常,Unable to debug System.Net.DigestClient throws an exception