发布.NET Core 2控制台应用程序时出现SQLite错误

时间:2018-02-05 20:59:27

标签: c# .net visual-studio sqlite

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

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

  

System.Reflection.TargetInvocationException:
  调用的目标抛出了异常。 --->

     

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

我不知道是什么导致这个问题,我在互联网上找到的每一件事都不起作用或不适用于我的情况。我真的不知道我做错了什么,而且我已经尝试了所有的事情。

2 个答案:

答案 0 :(得分:0)

如果您正在使用System.Data.SQLite库,则会在常见问题解答中提及此例外:

  

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

     

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

     

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

所以:

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

答案 1 :(得分:0)

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

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

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

您需要确保系统上安装了NuGet软件包,因为在项目发布时,依赖关系是从本地 NuGet缓存中解决的。