在Azure Functions中使用SQLite为何出现DllNotFoundException?
e_sqlite3的问题 这问题我之前在部署SQLite相关的Azure Function时也踩过坑,核心原因就是SQLite的原生依赖e_sqlite3.dll没被正确打包部署到Azure环境里。给你几个实测有效的解决方向:
确保SQLite NuGet包的依赖配置正确
如果你用的是Microsoft.Data.Sqlite或者System.Data.SQLite这类包,它们依赖的原生SQLite库需要明确配置才能被复制到发布目录。可以在你的项目文件(.csproj)里添加以下配置,强制将对应平台的e_sqlite3.dll包含到部署包中:<ItemGroup> <!-- 针对Windows x64环境,根据你的Function运行平台调整包名 --> <None Include="$(SolutionDir)packages\SQLitePCLRaw.lib.e_sqlite3.win.x64\**\e_sqlite3.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </None> </ItemGroup>同时要确保安装了对应平台的运行时包,比如Windows环境安装
SQLitePCLRaw.lib.e_sqlite3.win.x64,Linux环境安装SQLitePCLRaw.lib.e_sqlite3.linux。调整Function App的运行时平台
很多时候是平台位数不兼容导致的:- 登录Azure门户,找到你的Function App
- 进入「配置」→「常规设置」
- 将「平台」从32位改为64位(如果你的
e_sqlite3.dll是64位版本) - 重启Function App后再测试
如果是Linux计划,需要确保系统已安装SQLite依赖。如果是消费计划无法自定义系统环境,可以考虑使用预安装了
libsqlite3-dev的自定义镜像部署。手动添加原生DLL到部署包
如果NuGet的自动复制逻辑没生效,手动操作更稳妥:- 下载对应平台的
e_sqlite3.dll(比如Windows x64版本) - 在项目中创建
runtimes\win-x64\native目录,把DLL放进去 - 在
.csproj中添加配置,确保文件被复制到发布目录:<ItemGroup> <Content Include="runtimes\win-x64\native\e_sqlite3.dll"> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </Content> </ItemGroup>
本地发布后检查输出目录,确认DLL已包含在发布包中,再部署到Azure。
- 下载对应平台的
检查部署流程是否排除了DLL文件
如果你用Zip部署或者CI/CD管道(比如Azure DevOps),要确保构建/部署任务没有过滤掉.dll文件。有些构建脚本会默认排除原生库,需要在任务配置中添加例外,把e_sqlite3.dll加入允许列表。
本地运行正常是因为你的开发环境已经预装了SQLite依赖,或者NuGet自动把DLL复制到了本地输出目录,但Azure环境是干净的沙箱,必须主动把这些原生依赖打包进去才行。
内容的提问来源于stack exchange,提问作者jgfооt

