Microsoft.Data.SQLite: библиотека e_sqlite3 не найдена

#c# #asp.net #.net #sqlite #iis

#c# #asp.net #.net #sqlite #iis

Вопрос:

Проблема: я пытаюсь разработать ASP.NET Веб-приложение MVC (.Net Framework 4.7.2), в котором я хочу использовать Microsoft.Data.Sqlite версию (5.0.2), но когда я запускаю его, происходит сбой моего веб-приложения (как в debug IIS Express, так и в app.publish на локальном IIS в Windows 10) в следующей строке кода:

 SqliteConnection dbConn = new SqliteConnection("Data Source=test.db");
 

Генерируется исключение, указанное в:

 System.TypeInitializationException
  HResult=0x80131534
  Message=The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception.
  Source=Microsoft.Data.Sqlite
  StackTrace:
   at Microsoft.Data.Sqlite.SqliteConnection..ctor(String connectionString)
   at sqliteTest.Controllers.ValuesController.Get() in C:UsersFaqeerHussainsourcerepossqliteTestsqliteTestControllersValuesController.cs:line 16
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)

  This exception was originally thrown at this call stack:
    [External Code]

Inner Exception 1:
TargetInvocationException: Exception has been thrown by the target of an invocation.

Inner Exception 2:
Exception: Library e_sqlite3 not found
 

Что я пробовал до сих пор:
После Inner Exception: Library e_sqlite3 not found этого я попытался просмотреть папку «bin» и обнаружил, что e_sqlite3.dll уже есть в binruntimeswin-x64native , а также в binruntimeswin-x86native папках, обе содержат e_sqlite3.dll .
Пробовал копировать вручную вышеупомянутые x86 / x64 e_sqlite3.dll в корневую bin папку, но ошибка по-прежнему остается.

Что я должен сделать, чтобы начать Microsoft.Data.Sqlite работать в моем ASP.NET Веб-приложение MVC (.NET Framework 4.7.2)?

Ответ №1:

Это связано с тем, что пакет Microsoft.Data.Sqlite несовместим с версией .Net Framework. Вы можете попробовать изменить версию NuGet Microsoft.Data.Sqlite на 2.2.0 для нормальной работы.

введите описание изображения здесь

Ответ №2:

Я обнаружил, что e_sqlite3.dll находится по адресу runtimeswin-x86nativee_sqlite3.dll . Итак, я создал эти папки и добавил e_sqlite3.dll в собственной папке. После этого это сработало!

Ответ №3:

К сожалению, для всех, кто сталкивается с этой проблемой, это известная проблема, которая еще не исправлена.

В моем случае я ссылался на .NET Standard 2.0 библиотеку, которая использовала Sqlite, из .NET Framework 4.8 проекта. Я просто изменил библиотеку, чтобы она также предназначалась для .NET 4.8 в качестве обходного пути, поскольку она не использовалась ни в одной другой реализации .NET.

Поэтому мне пришлось изменить <TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>net48</TargetFramework> в моем проекте Sqlite.

Ответ №4:

Я также работаю над разработкой ASP.NET (.Net Framework 4.7) веб-приложение, в котором я использовал версию Microsoft.Data.Sqlite (5.0.10), но когда я запускаю свое веб-приложение, оно выходит из строя и выдает исключение: библиотека e_sqlite3 не найдена

Мне потребовалось почти полтора дня, чтобы решить эту проблему. В моем случае я удалил библиотеку зависимостей Microsoft.Data.Sqlite и другие, такие как Microsoft.Data.Sqlite.Core, SQLitePCLRaw.bundle_e_sqlite3, SQLitePCLRaw.core, SQLitePCLRaw.lib.e_sqlite3, SQLitePCLRaw.provider.dynamic_cdecl и т. Д. Из папки пакета.

Теперь я добавил новый Microsoft.Data.Sqlite с версией (6.0.0) вместе со своими зависимостями. Мое приложение работает нормально. (Примечание: я использовал эту библиотеку только для чтения базы данных SpatiaLite и для вызова функции SpatiaLite.)