我开发了一个win mobile(v5.0)应用程序,我只使用了1个数据库SQLITE和这些引用:
使用此应用程序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年前)并且一切正常。
答案 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就会被加载。