2015-08-11 3 views
0

Итак, я работал над настольным приложением, которое использует SQLite для хранения некоторых данных для каждого исполнения. Мы работаем в C#, .NET 4.5, Visual Studio 2012, используя следующие пакеты NuGet для поддержки из SQLite необходимо:Sqlite-net висит вызов в Windows 10

  • SQLite-сеть
  • System.Data.SQLite (x86/x64)
  • System.Data.SQLite ядро ​​(x86/x64)
  • System.Data.SQLite EF6
  • System.Data.SQLite LINQ

Эти пакеты установки двух файлов: SQLite.cs и SQLiteAsync.cs в проект, управляемый код. Однако нам нужно было искать sqlite3.dll, чтобы поддерживать вызовы этих файлов неуправляемому коду. Этот файл включен на корневом уровне проекта и скопирован в bin на сборке.

Теперь мы начали разработку в Windows 8.1 и смогли успешно использовать SQLite для создания/обновления файлов .sqlite DB. Затем перешел на Windows 10 (это бесплатно, теперь это самая важная платформа для поддержки), и теперь любой вызов неуправляемого кода (sqlite3.dll) HANGS. Висит худшее, никаких исключений, никаких подсказок, неуправляемого кода = нет отладки. Могу ли я получить амен?

Зависание происходит на SQLite3.Open, вот стек вызовов (что я должен был кусочкам, я ненавижу виснет ...)

**HANGS AT THIS CALL: SQLite3.Open** 
var r = SQLite3.Open(databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero) in SQLite.cs 
: base(SQLiteConnectionString.DatabasePath, SQLIteOpenFlags, SQLiteConnectionString.StoreDateTimeAsTicks) in SQLite.cs 
Connection = new SQLiteConnectionWithLock(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs 
entry = new Entry(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs 
return SQLiteConnectionPool.Shared.GetConnection(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs 
var conn = this.GetConnection() in SQLiteAsync.cs (their code) 
Task initTask = db.RunInTransactionAsync(...) in SQLFacade.cs (our code) 

Я надеюсь, что это не так уж сложно читать.

В любом случае, я надеюсь, что у кого-то есть некоторое представление о том, почему это происходит внезапно. Я попытался переустановить все пакеты nuget и получить последнюю версию sqlite3.dll безрезультатно. Тем временем я буду проверять с помощью Windows Defender и Bitdefender (мой выбранный антивирус), чтобы увидеть, возможно ли они блокируют доступ к sqlite3.dll по какой-то причине.

Если у кого-либо есть контакт с членом команды SQLite, пожалуйста, обратитесь к ним на этот пост, эта промаха - ОГРОМНЫЙ дорожный блок для прогресса нашей команды.

Спасибо!

+1

Просто догадаться, но вы используете 'Task.Wait()' или 'Task.Result' где-то в стеке вызовов? Если это так, это классический тупик. Подробнее здесь: http://stackoverflow.com/questions/15021304/an-async-await-example-that-causes-a-deadlock –

+0

Да, мы делаем. Спасибо за удар, но мой неловкий ответ решил проблему ... – Freestyle076

ответ

2

BIG, BIG SIGH

Я был на неправильной сборке конфиге. Мы создаем 64-битное приложение, так как мои конфигурации для сборки проекта были x86 по всем направлениям. sqlite3.dll - это 64-битная библиотека. Если бы это было наоборот, я бы увидел исключение BadImageFormatException, в этом случае я повесился.

Ах, жизнь программиста.

Я надеюсь, что этот пост поможет НЕКОТОРЫМ, иначе он будет навсегда жить на моей стене стыда.