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

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

参考:
What is the "Could not find resource assembly" error message?
智能设备项目:开发期间查看错误信息

posted @ 2007-01-27 18:43 黎波 阅读(2902) 评论(6)  编辑 收藏 网摘 所属分类: .NET CF

  回复  引用    
#1楼2007-06-12 09:49 | qqiangsir[未注册用户]
System.SR.dll 这个dll在哪个目录下面?我没有找到啊.
  回复  引用  查看    
#2楼[楼主]2007-06-12 20:45 | Bob Li      
在:
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提取。

  回复  引用    
#3楼2007-06-20 16:18 | 小天[未注册用户]
有时候这个exception是由于你没有sign你的程序文件
  回复  引用  查看    
#4楼[楼主]2007-06-20 22:29 | Bob Li      
@小天
有可能,不过我还没有遇到这种情况呢

  回复  引用    
#5楼2008-10-30 09:31 | totsheng[未注册用户]
--引用--------------------------------------------------
Bob Li: 在:
<br>C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\Diagnostics
<br>或
<br>C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\Diagnostics
<br>目录下的cab文件中,可以用WinRAR解压缩出来,或者利用WinCE CAB Manager提取。
--------------------------------------------------------
这解压出来也不是DLL文件,可怎么办?

  回复  引用    
#6楼2008-12-12 16:30 | kevin.lee[未注册用户]
说下具体操作步骤,怎么添加进引用的呢。



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 631508




相关文章:

相关链接: