Windows 10 64位机器加载System.Data.SQLite.dll时出现异常
这个问题我之前帮同事排查过类似的,大概率是依赖项不匹配或者系统缺少必要运行库导致的,给你几个针对性的排查和解决方向:
确认SQLite DLL的位数与应用目标平台一致
虽然两台机器都是64位,但如果你的应用编译目标平台设为AnyCPU,但部署的System.Data.SQLite.dll是32位版本,Windows 10的64位环境下可能会出现加载失败的情况。建议:- 把应用的编译目标平台明确设为
x64 - 替换成对应x64版本的
System.Data.SQLite.dll,确保和应用执行目录放在一起(不要放在子文件夹里,除非配置了加载路径)
- 把应用的编译目标平台明确设为
安装对应版本的VC++运行时库
System.Data.SQLite依赖Visual C++ Redistributable运行时包,Windows Server 2012 R2可能已经预装了所需版本,但Windows 10可能没有。你需要根据SQLite的版本下载对应的x64版VC++运行时:- 如果是较新的SQLite版本(比如1.0.110+),一般需要VC++ 2015-2022 Redistributable
- 安装完成后重启应用再测试
检查并配置程序集绑定重定向
如果你的应用基于.NET Framework,可能存在程序集版本冲突的问题。可以在app.config(或web.config)中添加绑定重定向,指定正确的SQLite版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-你使用的SQLite版本号" newVersion="你使用的SQLite版本号" /> </dependentAssembly> </assemblyBinding> </runtime>记得把版本号替换成你实际部署的
System.Data.SQLite.dll的版本。用Dependency Walker排查缺失的依赖模块
如果上面的方法都没解决,下载Dependency Walker工具,打开你的System.Data.SQLite.dll,它会直观显示所有依赖的模块。如果某个模块显示红色标记,说明这个模块缺失,根据模块名称安装对应的运行库即可(比如msvcr120.dll对应VC++ 2013运行时)。检查应用目录的权限
有时候Windows 10的UAC权限会限制应用加载DLL。右键应用的执行文件,选择「以管理员身份运行」测试,如果能正常连接,就需要调整应用所在目录的权限,给当前用户添加「读取和执行」的权限。
如果还是无法解决,可以补充一下你的应用使用的.NET版本、SQLite的具体版本,以及应用的编译目标平台,这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者nina

