.NET Core 2控制台应用发布时SQLite DLL加载错误求助
解决.NET Core自包含发布时SQLite原生DLL缺失的问题
我之前也碰到过和你完全一样的情况——在Visual Studio里跑起来毫无问题,一用dotnet publish -c release -r win-x64 --self-contained做自包含发布就弹出DllNotFoundException,找不到e_sqlite3.dll对吧?这本质是自包含发布过程中,SQLite的原生依赖没有被正确复制到发布目录里,给你几个亲测有效的解决办法:
1. 确认依赖包安装正确
首先检查你的项目有没有安装SQLitePCLRaw.bundle_e_sqlite3这个NuGet包(Microsoft.EntityFrameworkCore.Sqlite其实已经依赖它了,但有时候版本冲突会导致它没被正确引入)。如果没有的话,手动安装对应版本的包,确保和Microsoft.EntityFrameworkCore.Sqlite的版本完全匹配。
2. 修改项目配置强制复制原生库
在你的.csproj文件里添加以下配置,确保原生SQLite DLL被复制到发布目录:
<PropertyGroup> <!-- 针对自包含发布,启用原生库自解压 --> <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> </PropertyGroup> <ItemGroup> <!-- 显式指定复制win-x64平台的e_sqlite3.dll --> <None Include="$(UserProfile)\.nuget\packages\sqlitepclraw.bundle_e_sqlite3\*\runtimes\win-x64\native\e_sqlite3.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </None> </ItemGroup>
注:把*换成你实际安装的SQLitePCLRaw.bundle_e_sqlite3版本号,或者保留*让MSBuild自动匹配最新版本。
3. 手动复制原生DLL到发布目录
如果上面的配置还是不行,那就直接手动操作:
- 找到你的NuGet包缓存路径(一般是
C:\Users\[你的用户名]\.nuget\packages\sqlitepclraw.bundle_e_sqlite3\[版本号]\runtimes\win-x64\native\e_sqlite3.dll) - 把这个DLL复制到发布生成的文件夹根目录,或者
runtimes/win-x64/native子文件夹里,再运行程序就没问题了。
额外排查点
- 检查你的.csproj里有没有正确设置
RuntimeIdentifiers,比如:
<PropertyGroup> <RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers> </PropertyGroup>
- 确保你的.NET SDK版本是稳定版,避免用预览版SDK导致发布逻辑出问题;同时把所有EF Core相关的包都升级到最新稳定版,版本不兼容也是常见诱因。
内容的提问来源于stack exchange,提问作者user8982104
相关产品推荐
相关产品推荐

