MissingMethodException (не удается найти PInvoke DLL 'sqlceme30.dll') для Windows Mobile - PullRequest
0 голосов
/ 14 января 2010

Я разработал приложение win mobile (v5.0) и использую ТОЛЬКО 1 базу данных SQLITE со следующими ссылками:

  • System.Data.SQLite.dll (сборочная версия и версия продукта: 1.0.65.0);
  • SQLite.Interop.065.DLL (версия продукта: 1.0 и является библиотекой c ++ для первой библиотеки DLL).

После 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 ]

1 голос
/ 14 января 2010

Возможно, отсутствует файл sqlceme30.dll или у вас недостаточно виртуальной памяти, и DLL не может быть загружена. Попробуйте эмулятор и / или закройте несколько приложений.

0 голосов
/ 12 мая 2010

Это исключение указывает на проблему с нехваткой памяти, есть запись в блоге, которая очень хорошо объясняет это: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx

вы можете попробовать увеличить память на вашем устройстве или вызвать фиктивный вызов при запуске, чтобы dll загрузилась.

0 голосов
/ 14 января 2010

Эта dll необходима для SQL CE. Ваша проблема исчезнет, ​​если вы развернете библиотеки DLL Sql CE вместе с вашим приложением или установите SQL CE 3.0 (файл CAB) на свое устройство.

НО, странно, что вы получаете эту ошибку и используете не Sql CE, а SQLite. У вас есть ссылка на System.Data.SqlServerCe в вашем проекте? Если это так, можете ли вы удалить его и посмотреть, будет ли ваше приложение компилироваться и запускаться?

0 голосов
/ 14 января 2010

Были ли недавно установлены какие-либо приложения, которые могли бы перезаписать эту dll другой (возможно, более старой) версией, у которой нет этого имени метода (или того же метода с другой подписью)?

Запустите командную строку VS и перейдите в каталог, где находится эта dll, и запустите dumpbin / exports sqlceme30.dll. Это выведет список всех экспортированных имен функций и определит, находится ли та, которую вы пытаетесь вызвать, в списке.

0 голосов
/ 14 января 2010

Просмотрите ваш код, чтобы увидеть, используется ли SqlCeCommand где-либо. Это не должно быть так, как вы используете SqLite с правильными DLL.

Если вы не можете найти какие-либо ссылки на SqlCeCommand в своем коде, взгляните на любые внешние библиотеки, которые вы могли добавить недавно, которые могут опираться на SQL CE / Mobile.

...