You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Functions中使用SQLite为何出现DllNotFoundException?

解决Azure Function部署后无法加载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的运行时平台
    很多时候是平台位数不兼容导致的:

    1. 登录Azure门户,找到你的Function App
    2. 进入「配置」→「常规设置」
    3. 将「平台」从32位改为64位(如果你的e_sqlite3.dll是64位版本)
    4. 重启Function App后再测试

    如果是Linux计划,需要确保系统已安装SQLite依赖。如果是消费计划无法自定义系统环境,可以考虑使用预安装了libsqlite3-dev的自定义镜像部署。

  • 手动添加原生DLL到部署包
    如果NuGet的自动复制逻辑没生效,手动操作更稳妥:

    1. 下载对应平台的e_sqlite3.dll(比如Windows x64版本)
    2. 在项目中创建runtimes\win-x64\native目录,把DLL放进去
    3. 在.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:37:38