用于Windows Mobile的MissingMethodException(无法找到PInvoke DLL的'sqlceme30.dll')

时间:2010-01-14 15:18:38

标签: c# sqlite compact-framework sql-server-ce

我开发了一个win mobile(v5.0)应用程序,我只使用了1个数据库SQLITE和这些引用:

  • System.Data.SQLite.dll(程序集版本和产品版本:1.0.65.0);
  • SQLite.Interop.065.DLL(产品版本:1.0,是第一个dll的c ++ lib)。

使用此应用程序5周后,我今天得到一个奇怪的例外,我不明白它是什么? 例外是:

MissingMethodException  
Can`t find PInvoke DLL 'sqlceme30.dll '

at

System.Data.SqlServerCe.SqlCeCommand.ReleaseNativeInterfaces()
at
System.Data.SqlServerCe.SqlCeCommand.Dispose(Boolean disposing)
......

出了什么问题? 有人知道这个解释我吗?

顺便说一句:到目前为止,我使用这些引用来解决3-4个应用程序(1年前)并且一切正常。

5 个答案:

答案 0 :(得分:1)

可能是'sqlceme30.dll'丢失,或者你可能没有虚拟内存而且无法加载DLL。尝试使用模拟器和/或先关闭一些应用程序。

答案 1 :(得分:0)

查看代码以查看是否在任何地方使用SqlCeCommand。它不应该像使用正确的DLL一样使用SqLite。

如果在代码中找不到对SqlCeCommand的任何引用,请查看最近可能添加的可能依赖于SQL CE / Mobile的任何外部库。

答案 2 :(得分:0)

最近是否安装了可能已使用不具有该方法名称的不同(可能较旧)版本覆盖此dll的任何应用程序(或使用不同签名的相同方法)?

运行VS命令提示符并转到该dll所在的目录并运行dumpbin / exports sqlceme30.dll。这将列出所有导出的函数名称,并查看您尝试调用的函数名称是否在列表中。

答案 3 :(得分:0)

SQL CE需要此dll。如果您将Sql CE dll与您的应用程序一起部署,或者在您的设备上安装SQL CE 3.0(CAB文件),您的问题就会消失。

但是,你得到这个错误很奇怪,你不使用Sql CE,而是使用SQLite。您是否在项目中引用了System.Data.SqlServerCe?如果是这种情况,你可以删除它,看看你的应用程序是否仍在编译并运行?

答案 4 :(得分:0)

此异常似乎表明内存不足的问题,有一篇博文非常好地解释了这一点:http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx

您可以尝试增加设备上的内存,或者在启动时调用虚拟调用,这样dll就会被加载。