部署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
相关产品推荐
相关产品推荐

