【问题标题】:Microsoft.Data.SQLite: Library e_sqlite3 not foundMicrosoft.Data.SQLite:找不到库 e_sqlite3
【发布时间】:2021-04-21 08:02:52
【问题描述】:

问题: 我正在尝试开发一个 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 应用程序中工作?

【问题讨论】:

    标签: c# asp.net .net sqlite iis


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于遇到此问题的任何其他人,很遗憾,这是一个尚未修复的 known issue

      在我的例子中,我从 .NET Framework 4.8 项目中引用了一个使用 Sqlite 的 .NET Standard 2.0 库。我只是将库更改为也以 .NET 4.8 作为解决方法,因为它没有被任何其他 .NET 实现使用。

      所以我不得不在我的 Sqlite 项目中将 &lt;TargetFramework&gt;netstandard2.0&lt;/TargetFramework&gt; 更改为 &lt;TargetFramework&gt;net48&lt;/TargetFramework&gt;

      【讨论】:

        【解决方案3】:

        我还致力于开发一个 ASP.NET (.Net Framework 4.7) Web 应用程序,我在其中使用了 Microsoft.Data.Sqlite 版本 (5.0.10),但是当我运行我的 Web 应用程序时,它崩溃了并给我Exception: Library e_sqlite3 not found

        我几乎花了一天半的时间来解决这个问题。就我而言,我已经删除了“Microsoft.Data.Sqlite”的依赖库以及其他的依赖库,例如 Microsoft.Data.Sqlite.Core、SQLitePCLRaw.bundle_e_sqlite3、SQLitePCLRaw.core、 包文件夹中的 SQLitePCLRaw.lib.e_sqlite3、SQLitePCLRaw.provider.dynamic_cdecl 等。

        现在,我添加了版本为 (6.0.0) 的新 Microsoft.Data.Sqlite 及其依赖项。我的应用程序运行良好。 (注意:我只使用这个库来读取 SpatiaLite 数据库和调用 SpatiaLite 函数。)

        【讨论】:

          【解决方案4】:

          我发现 e_sqlite3.dll 位于 runtimes\win-x86\native\e_sqlite3.dll。 所以我创建了这些文件夹并在本机文件夹中添加了 e_sqlite3.dll。之后就成功了!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-01-26
            • 2019-07-06
            • 1970-01-01
            • 1970-01-01
            • 2020-02-18
            • 1970-01-01
            相关资源
            最近更新 更多