Problem:
I’m trying to develop an ASP.NET MVC (.Net Framework 4.7.2) web app in which I want to use Microsoft.Data.Sqlite
version (5.0.2), but when I run it my web app crashes (both in debug IIS Express, and in app.publish on local IIS on Windows 10) at following code line:
SqliteConnection dbConn = new SqliteConnection("Data Source=test.db");
The exception thrown is as under:
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
What I’ve tried so far:
Following Inner Exception: Library e_sqlite3 not found
tried looking around the ‘bin’ folder, and found that e_sqlite3.dll is already there in binruntimeswin-x64native
and also in binruntimeswin-x86native
folders, both contain e_sqlite3.dll.
Tried copying manually the above-mentioned x86/x64 e_sqlite3.dll to root bin
folder but the error still remains.
What should I do to get Microsoft.Data.Sqlite
working in my ASP.NET MVC (.NET Framework 4.7.2) web app?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
This is because the package of Microsoft.Data.Sqlite is not compatible with the version of .Net Framework. You can try to change the version of NuGet of Microsoft.Data.Sqlite to 2.2.0 to run normally.
Method 2
For anyone else running into this issue, unfortunately it’s a known issue that hasn’t been fixed yet.
In my case I was referencing a .NET Standard 2.0
library that was using Sqlite, from a .NET Framework 4.8
project. I simply changed the library to also target .NET 4.8 as a workaround since it wasn’t being used by any other implementation of .NET.
So I had to change <TargetFramework>netstandard2.0</TargetFramework>
to <TargetFramework>net48</TargetFramework>
in my Sqlite project.
Method 3
I have also working on to develop an ASP.NET (.Net Framework 4.7) web app in which I have used Microsoft.Data.Sqlite version (5.0.10), but when I run it my web app, it crashes and give me Exception: Library e_sqlite3 not found
I have almost take one and half day to solved this problem. In my case, I have remove dependency library of ‘Microsoft.Data.Sqlite‘ and others such as
Microsoft.Data.Sqlite.Core, SQLitePCLRaw.bundle_e_sqlite3, SQLitePCLRaw.core,
SQLitePCLRaw.lib.e_sqlite3, SQLitePCLRaw.provider.dynamic_cdecl, etc. from package folder.
Now, I have added new Microsoft.Data.Sqlite with version (6.0.0) along with its dependencies. My app is working fine. (Note: I have only used this library to read SpatiaLite database and to call SpatiaLite function.)
Method 4
I found that the e_sqlite3.dll is located at runtimeswin-x86nativee_sqlite3.dll.
So I created those folders and added the e_sqlite3.dll in the native folder. After that it worked!
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0