Microsoft.Data.SQLite:找不到库 e_sqlite3

问题描述 投票:0回答:12

我的 ASP.NET MVC (.Net Framework 4.7.2) Web 应用程序使用 Microsoft.Data.Sqlite 5.0.2 崩溃(在调试 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

e_sqlite3.dll 已经在

bin\runtimes\win-x64\native
bin\runtimes\win-x86\native
中。尝试将 x86/x64 e_sqlite3.dll 复制到根
bin
文件夹,但错误仍然存在。我应该怎么做才能让 Microsoft.Data.Sqlite 正常工作?

c# asp.net .net sqlite iis
12个回答
9
投票

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


7
投票

我发现e_sqlite3.dll位于runtimes\win-x86 原生_sqlite3.dll。 因此,我创建了这些文件夹并将 e_sqlite3.dll 添加到本机文件夹中。之后就成功了!


3
投票

抛弃

Microsoft.Data.Sqlite
,转而支持
System.Data.Sqlite
。它支持 3.38 版数据库,并具有更新插入和其他优点,并且不存在此类问题。我做到了,再也没有回头。

区别在于名称的大小写:

using System.Data.SQLite;

代替:

SqliteConnectionStringBuilder
SqliteConnection
SqliteCommand
SqliteTransaction
SqliteType.Text

您将分别使用:

SQLiteConnectionStringBuilder
SQLiteConnection
SQLiteCommand
SQLiteTransaction
DbType.String etc

3
投票

这是一个已知问题尚未修复。

我引用了来自 .NET Framework 4.8 项目的使用 SQLite 的 .NET Standard 2.0 库。我将库更改为也以 .NET 4.8 为目标作为解决方法,因为 .NET 的任何其他实现都没有使用它。我必须在我的 SQLite 项目中将

<TargetFramework>netstandard2.0</TargetFramework>
更改为
<TargetFramework>net48</TargetFramework>


2
投票

我认为这里的问题是

Microsoft.Data.Sqlite
依赖于
SQLitePCLRaw.bundle_e_sqlite3
SQLitePCLRaw.bundle_e_sqlite3
依赖于
SQLitePCLRaw.lib.e_sqlite3
,其中
SQLitePCLRaw.lib.e_sqlite3
没有实际的DLL,因为它直接提供本机二进制文件。因此,当我遇到这个问题时,我发现安装后我的
SQLitePCLRaw.lib.e_sqlite3
中不存在
csproj
NuGet 及其构建目标。因此,当项目由 VS 或 MSBuild 构建时,他们都不知道在构建过程中必须将
e_sqlite3
本机二进制文件复制到
bin
文件夹中。

我确实通过手动将目标添加到

csproj
中解决了这个问题:

<Project>

  ...

  <Import Project="..\..\packages\SQLitePCLRaw.lib.e_sqlite3.2.1.5\buildTransitive\net461\SQLitePCLRaw.lib.e_sqlite3.targets" Condition="Exists('..\..\packages\SQLitePCLRaw.lib.e_sqlite3.2.1.5\buildTransitive\net461\SQLitePCLRaw.lib.e_sqlite3.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\SQLitePCLRaw.lib.e_sqlite3.2.1.5\buildTransitive\net461\SQLitePCLRaw.lib.e_sqlite3.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\SQLitePCLRaw.lib.e_sqlite3.2.1.5\buildTransitive\net461\SQLitePCLRaw.lib.e_sqlite3.targets'))" />
  </Target>

  ...

</Project>


0
投票

对于

Maui
多平台应用程序,请确保您的项目文件中有以下内容(更新到实际版本):

    <ItemGroup>    
        <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.2" />
    </ItemGroup>

    <ItemGroup>
      <None Remove="SQLitePCLRaw.bundle_e_sqlite3" />
    </ItemGroup>

0
投票

我使用 Microsoft.Data.Sqlite 5.0.10 的 ASP.NET (.Net Framework 4.7) Web 应用程序给出:

异常:找不到库 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 数据库。


0
投票

使用 Microsoft.Data.Sqlite 5.0.0 的 .NET Framework 4.7.2 测试库的 NUnit 2 GUI 中出现此错误。找到了 xUnit 解决方案here,即禁用卷影复制。


0
投票

我不得不返回到用于我的旧项目(4.7.2 及之前)的 Microsoft.Data.Sqlite 版本到 1.0.0。我确实检查过:平台子文件夹和 DLL 都在那里。


0
投票

这个问题在所有最新版本中仍然存在!我不敢相信,在问题首次报告 5 年后,这种情况仍然在发生。

我在它工作之前摆弄了很长时间。最终找到了简单的解决方案。

为 AnyCPU 构建项目

将 e_sqlite3.dll 从release\x86文件夹复制到与主可执行文件相同的文件夹

应用程序然后运行,没有错误。


0
投票

如果您使用 NuGet 下载了 Microsoft.Data.Sqlite:使用该目录 \Users"用户名".nuget\packages\sqlitepclraw.lib.e_sqlite3"版本" untimes\win-x64 原生_sqlite3.dll 其中“Version”不是e_sqlite3.dll版本,而是Microsoft.Data.Sqlite 对于 e_sqlite3.dll 版本,执行 cmd.CommandText = "select sqlite_version();"


0
投票

我有一个类似的问题,它是由

packages.config
PackageReference
混合引起的。 (我现在正在开发一些旧的遗留软件)我右键单击
packages.config
并选择
Migrate packages.config to PackageReference
,它修复了调用
SQLitePCL.Batteries.Init();
时无法找到 e_sqlite3.dll 的问题此外,我不再需要打电话给
SQLitePCL.Batteries.Init();
,所以我删除了它。

© www.soinside.com 2019 - 2024. All rights reserved.