如果有一个应用程序(我们称之为 A,CF 3.5)在同一目录中调用另一个应用程序(B,CF 3.5)来委派一些工作(下载文件)。只要应用程序 A 不加载 SQL Server CE 程序集(3.5 SP2),这就会很好地工作。如果是,应用程序 B 将因随机文件系统错误(例如无法加载的程序集)和许多异常而崩溃在文件sys.exe 中。以下是 Windows Mobile 生成的错误报告的内容:
桶参数
事件类型:WinCE50lbException
应用名称:filesys.exe
应用程序版本:5.2.0.0
AppStamp:29ccdda8
模组名称:vcefsd.dll
版本:5.2.0.0
模组邮票:52652c34
偏移量:000017a0
自己的名字:B.exe
拥有版本:1.0.0.0
自己的邮票:5003c932
即使在调试结束并且两个应用程序都不再运行后,此错误也会发生多次。应用程序 B 本身发生的错误示例:
找不到文件或程序集名称“OpenNETCF.Drawing,Version=2.2.0.0,Culture=neutral,PublicKeyToken=...”或其依赖项之一。
程序集名称会不时更改(也可以是 CF 3.5 程序集)。错误发生在模拟器中(总是),但从不在真实设备上。如果应用程序 A 正在下载文件而不是将工作委托给 B,则不会发生错误。
我怀疑模拟器的存储卡驱动程序会导致此错误,但我不知道如何进一步调试该问题。
注意:应用程序 A 使用以下 API 调用加载本地部署的 SQL CE 库(sqlceoledb35.dll、sqlcese35.dll、sqlceqp35.dll、sqlceme35.dll、sqlceca35.dll、sqlcecompact35.dll):
[DllImport("coredll.dll")]
private static extern IntPtr LoadLibrary(string fileName);
更新
在我为测试删除 OpenNETCF 引用后,我得到了这个异常:
无法读取配置文件 '...\some.config':UnauthorizedAccessException
这是我们的配置管理器包装的异常(我无法调试它,因为它发生在 B 中)。应用程序 A 读取该文件,但在反序列化后立即关闭并释放它。