错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路

WinFrom程序,错误:Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块。 (Exception from HRESULT: 0x8007007E)

Stack Trace:
   at System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none(SQLiteConfigOpsEnum op)
   at System.Data.SQLite.SQLite3.StaticIsInitialized()
   at System.Data.SQLite.SQLiteLog.Initialize()
   at System.Data.SQLite.SQLiteConnection..ctor(String connectionString, Boolean parseViaFramework)
   at System.Data.SQLite.SQLiteConnection..ctor(String connectionString)
   at Utility.SQLiteCreator.createNewDatabase() in d:\Workspace_VS\OverseaPMS\Utility\SQLiteCreator.cs:line 97
   at RedmineIssuesMigrationTool.Program.createDBSQLite()

   at RedmineIssuesMigrationTool.Program.Main(String[] args) / System.Data.SQLite.SQLiteErrorCode sqlite3_config_none(System.Data.SQLite.SQLiteConfigOpsEnum) / Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块。 (Exception from HRESULT: 0x8007007E)

解决方法:

安装C++运行库:

Microsoft Visual C++ 2008 SP1 Redistributable(X86,X64)

Microsoft Visual C++ 2010 SP1 Redistributable(X86,X64)

Microsoft Visual C++ 2012 SP1 Redistributable(X86,X64)

错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路_第1张图片

背景

开发了一个WinForm程序,已经到了交付阶段。然而,打包的安装程序,在一部分人的计算机上可以运行,一部分的不行,提示“Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块”。这个问题真是让人头大。一直以为是程序缺少程序集“SQLite.Interop.dll”,但后面发现,把程序集打包进去后安装仍然出错,程序停止运行,并且提示相同错误。

后来,思考为什么一部分可以用,一部分的机器不能用,会不会是环境问题?然后,发现一个共性问题是.NET Framework4.5.2的机器都不能运行,在想是不是.NET Framework4.5.2版本问题,但根据程序设计,它应该是兼容.NET Framework4.5及以上版本的。后来,还是回到问题本身,想到与SQLite相关,那就是可能缺什么与SQLite相关的组件?然后,对比了能运行的计算机环境和不能运行的计算机环境,如下图一和图二。

发现,两个计算机安装的Microsoft Visual C++  SP1 Redistributable(X86,X64)库不一样,图二明显少于图一。一个尝试的方法诞生,那就把图二也安装与图一一样的Microsoft Visual C++  SP1 Redistributable(X86,X64)

结果证明,尝试成功了,安装了之后,程序可以正常运行了。

图一 可以运行的计算机安装的程序

错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路_第2张图片

图二 不能运行的计算机安装的程序

错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路_第3张图片

为什么要安装上面那些库?

答:其实我没有想太明白,只知道一些c++编译的软件运行需要上面这些库,SQLite是C++编译的,程序中用到了SQLite数据库,所以要安装。但是为什么要安装那么多版本的:2008(X86,X64)、2010(X86,X64)、2012(X86,X64),没有想清楚。(当时安装的时候,是每安装完一个版本的就去运行一下程序,到最后,都安装完毕,程序才正常运行起来。)

下面是百度到的

错误:【Unable to load DLL 'SQLite.Interop.dll': 找不到指定的模块 】解决方法和思路_第4张图片

你可能感兴趣的:(错误集锦,C#学习笔记,Winform程序开发)