#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.)