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

部署WCF服务至IIS时无法加载SQLite.Interop.dll的问题求助

解决WCF服务部署IIS后找不到SQLite.Interop.dll的问题

这个问题我之前碰到过好多次,核心原因就是SQLite的原生Interop DLL和IIS运行的进程位数不匹配,结合你的情况(平台目标Any CPU、用的x86版本System.Data.SQLite),给你几个可行的解决方案:

方案1:强制IIS应用池启用32位程序

因为你的SQLite.Interop.dll是x86版本,但默认情况下64位系统的IIS会以64位进程运行应用池,导致找不到32位的原生DLL。操作步骤如下:

  • 打开IIS管理器,找到你的WCF服务对应的应用池
  • 右键选择「高级设置」,在弹出的窗口里找到「启用32位应用程序」选项,把它改成True
  • 重启应用池和站点,再测试连接

这个办法不需要改项目配置,适合不想调整编译平台的场景。

方案2:确保SQLite.Interop.dll正确部署到站点目录

NuGet安装System.Data.SQLite时,会自动在项目的x86和x64子文件夹中放入对应的SQLite.Interop.dll,但有时候发布到IIS时这些子文件夹不会被自动复制过去。你需要:

  • 找到项目输出目录(比如bin\Debug或bin\Release)里的x86文件夹
  • 把整个x86文件夹复制到IIS站点的bin目录下(注意不是把DLL直接放bin根目录,要放在x86子文件夹里)
  • 重启站点后,SQLite运行时会根据进程位数自动加载对应文件夹里的Interop DLL

方案3:将项目平台目标改为x86

既然你用的是x86版本的System.Data.SQLite,直接把项目的平台目标固定为x86是最彻底的办法:

  • 在Visual Studio里右键你的WCF服务项目,选择「属性」
  • 切换到「生成」标签页,把「平台目标」从Any CPU改成x86
  • 重新编译并发布到IIS,这样服务进程会以32位运行,就能顺利找到x86版本的SQLite.Interop.dll

这个方案从根源上避免了位数不匹配的问题,长期来看更稳定。

内容的提问来源于stack exchange,提问作者Kerwen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:01:30