iis Microsoft.Data.SQLite:未找到库e_sqlite3

gopyfrb3  于 2022-11-12  发布在  SQLite
关注(0)|答案(7)|浏览(574)

问题:我正在尝试开发一个ASP.NET MVC(.Net Framework 4.7.2)Web应用程序,希望在其中使用Microsoft.Data.Sqlite版本(5.0.2),但在运行该应用程序时,Web应用程序在以下代码行崩溃(在调试IIS Express时,以及在Windows 10上的本地IIS上的app.publish中):

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:\Users\FaqeerHussain\source\repos\sqliteTest\sqliteTest\Controllers\ValuesController.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已存在于bin\runtimes\win-x64\nativebin\runtimes\win-x86\native文件夹中,这两个文件夹都包含e_sqlite3.dll。尝试手动将上述x86/x64 e_sqlite3.dll复制到bin根文件夹,但错误仍然存在。

我应该怎么做才能让Microsoft.Data.Sqlite在我的ASP.NET MVC(.NET Framework 4.7.2)Web应用程序中正常工作?

ghg1uchk

ghg1uchk1#

这是因为Microsoft.Data.Sqlite的软件包与.Net Framework的版本不兼容。您可以尝试将Microsoft.Data.Sqlite的NuGet版本更改为2.2.0以正常运行。

fkaflof6

fkaflof62#

我发现e_sqlite3.dll位于runtimes\win-x86\native\e_sqlite3.dll,所以我创建了这些文件夹,并将e_sqlite3. dll添加到本机文件夹中。之后,它就工作了!

hsvhsicv

hsvhsicv3#

对于任何其他遇到这个问题的人来说,不幸的是,这是一个尚未修复的known issue
在我的例子中,我从一个.NET Framework 4.8项目中引用了一个使用Sqlite的.NET Standard 2.0库。我只是简单地将该库更改为也面向.NET 4.8,作为一种解决方案,因为它没有被任何其他. NET实现使用。
所以我不得不在我的Sqlite项目中将<TargetFramework>netstandard2.0</TargetFramework>更改为<TargetFramework>net48</TargetFramework>

huwehgph

huwehgph4#

我还在开发一个ASP.NET(.Net Framework 4.7)Web应用程序,其中我使用了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函数。)

yuvru6vn

yuvru6vn5#

转储Microsoft.Data.Sqlite以支持System.Data.Sqlite。它支持3. 38版本的数据库,带有upsert和其他额外功能,没有这样的问题。我做了,而且再也没有回头。
不同之处在于名称的大小写:

using System.Data.SQLite;

而不是:

SqliteConnectionStringBuilder
SqliteConnection
SqliteCommand
SqliteTransaction
SqliteType.Text

您将分别使用:

SQLiteConnectionStringBuilder
SQLiteConnection
SQLiteCommand
SQLiteTransaction
DbType.String etc
iezvtpos

iezvtpos6#

在使用Microsoft.Data.Sqlite 5.0.0的.net framework 4.7.2测试库的一个很好的旧NUnit 2 GUI中有这个错误。找到了xUnit解决方案here,它也修复了我的NUnit问题-禁用卷影复制。

fnatzsnv

fnatzsnv7#

我不得不一直回到Microsoft.Data.Sqlite的版本,它曾经为我的旧项目工作(4.7.2和pre):到1.0.0。有人可能会认为,在发布72个版本的同时,开发人员应该注意到这个问题,但事实并非如此,这要求太高了。我确实检查了:平台子文件夹和DLL都在那里。从一个DLL地狱到另一个!

相关问题