【问题标题】:SQLite error when publishing .NET Core 2 Console App发布 .NET Core 2 控制台应用程序时出现 SQLite 错误
【发布时间】:2019-09-21 17:27:22
【问题描述】:

我在发布 .NET Core 控制台应用时遇到问题。当我从 Visual Studio 运行它时它工作正常并且我得到零错误。但是,当我发布它时: dotnet publish -c release -r win-x64 --self-contained

我收到关于 SQLite 的错误。我正在使用 Microsoft.EntityFrameworkCore.Sqlite 库。我得到的错误是:

System.Reflection.TargetInvocationException:
调用的目标已引发异常。 --->

System.DllNotFoundException:
无法加载 DLL 'e_sqlite3':找不到指定的模块。 (HRESULT 异常:0x8007007E)

我不知道是什么导致了这个问题,我在互联网上找到的每一件事要么不起作用,要么不适用于我的情况。我真的不知道自己做错了什么,我几乎尝试了所有方法。

【问题讨论】:

  • 你使用的是哪个 Sqlite 库?
  • 可能你没有安装 64 位的 sqlite?
  • Microsoft.EntityFrameworkCore.Sqlite 这个是我用的,调试的时候可以用,发布后就不行了。
  • @Aevan:在您发布的应用程序的同一目录中是否有e_sqlite.dll 文件?
  • 没有。我找到了 .dll 文件并手动将其复制到输出目录。它现在正在工作!知道将来如何解决该问题吗?手动复制似乎不是正确的方法。

标签: c# .net visual-studio sqlite


【解决方案1】:

从 .NET Core 的角度来看,SQLite EF Core 提供程序在技术上是一个第 3 方库。根据this,您需要确保为您的项目修复了依赖项。

基本上,您需要确保在您的 .csproj 文件中调用 NuGet 包作为依赖项,如下所示:

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="[version #]" />
</ItemGroup>

并且您需要确保在您的系统上安装了 NuGet 包,因为在发布项目时,依赖项已从 本地 NuGet 缓存中解析。

【讨论】:

    【解决方案2】:

    如果您使用的是 System.Data.SQLite 库,那么他们的常见问题解答中提到了此异常:

    https://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q5

    为什么在尝试运行我的应用程序时会收到 DllNotFoundException(针对“sqlite3.dll”或“SQLite.Interop.dll”)?

    找不到指定的动态链接库 (DLL) 或由于缺少依赖项而无法加载。确保命名的动态链接库位于应用程序目录或系统 PATH 沿线的目录中,然后重试。此外,请确保已安装必要的 Visual C++ 运行时可再发行组件,除非您使用的是静态链接到它的动态链接库。

    所以:

    1. 确保您安装了最新的 Visual C++ 运行时:https://support.microsoft.com/kb/2019667
    2. 确保 sqlite3.dll 与其他 DLL 位于同一目录中
    3. 与您当前的问题无关,但请确保您的 sqlite3.dll 的构建与您的 Web 服务器进程(即 ARM、x86、x64)的 ISA 匹配。
    4. 确保您的网络应用程序的主机网络服务器进程没有使用异常的环境变量、PATH 或工作目录启动。

    【讨论】:

    • 这不是我使用的库。我正在使用 Microsoft.EntityFrameworkCore.Sqlite。
    猜你喜欢
    • 2020-01-11
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多