上海网站建设

上海网站建设

咨询热线:(021)51698180


ASP.NET编程

上海网站建设RSS订阅  RSS订阅  新浪微博  新浪微博  上海网站建设客服  客服  获取报价  获取报价

.net精简框架的“无法找到资源程式集”异常释疑

在做 .NET Compact Framework 研发的过程中,特别是访问 Web Service 的时候,常常会遇见这样的异常信息:“无法找到资源程式集”或"Could not find resource assembly"。比较让人纳闷的是,明明是要访问 Web Service,跟资源程式集有什么关系呢?为什么会用到资源程式集呢?什么是资源程式集呢?

被这个问题困扰了非常久,目前终于解开了迷题。

这个异常信息是这样产生的:在 .NET CF 应用程式访问 Web Service 的时候,程式因为某种原因(如:访问不到网络)要抛出一个异常,而这个异常的错误信息要从字符串资源程式集中获取(如:System.SR.dll),不过程式在GAC(全局程式集缓冲,在 "\视窗系统\" 目录)和程式目录(如:"\Program Files\SmartDeviceApp1")都未找到这个程式集,所以抛出了一个“无法找到资源程式集”或"Could not find resource assembly"的异常。说得直白一点,就是程式在抛出一个异常的时候,又遇见错误并抛出一个新的异常。所以我们看到的“无法找到资源程式集”的异常信息,并非是程式真正的错误信息。

有些朋友就郁闷了,我的 视窗系统 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的资源管理器浏览设备的 "\视窗系统\" 目录看个究竟。如果这两个文件是按原来的文件名(即 "System.SR.dll" 和 "System.SR.Resources.zh-CHS.dll")存放在"\视窗系统\"目录,那么证实他们没有被成功安装到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,会增加不少智能设备应用程式的存储内存空间。