我用C#和SQLite编写了windows应用程序。当PC应用程序上安装Microsoft Visual C ++ 2010 Redistributable Package x86正确运行但如果未安装Microsoft Visual C ++ 2010 Redistributable Package x86,则应用程序不会运行。为什么呢?
SQLite依赖于Microsoft Visual C ++ 2010 Redistributable Package x86吗?
答案 0 :(得分:5)
SQLite的版本由VS2010编译,它依赖于C运行时库,因此需要Visual C ++ 2010 Redistributable Package x86。
答案 1 :(得分:1)
是。 SQLite可能是用C ++编写的。它使用/ MD选项编译,这意味着它在运行时需要msvcrt#.dlls。 Restributable Package会安装它,如果没有它,它就无法运行
答案 2 :(得分:1)
因为SQLite显然在C ++中开发了SQLite.Interop.dll,并且因为他们这么说:
(11)为什么在尝试运行我的应用程序时会出现DllNotFoundException(对于“sqlite3.dll”或“SQLite.Interop.dll”)?
无法找到命名的动态链接库(DLL),或者由于缺少依赖项而无法加载它。确保指定的动态链接库位于应用程序目录或系统路径中的目录中,然后重试。 此外,请确保已安装必要的Visual C ++运行时可再发行组件,除非您使用的是静态链接到它的动态链接库。
强调我的最后一部分。您需要system.data.sqlite download page中的静态二进制文件才能不需要C ++运行时。在提供二进制文件的同一页面上,那些需要它的人会告诉你它 - 例如,4.0版需要x64的Visual C ++ 2010 SP1运行时,而.NET 4.5需要更新4,根据页面。我已经使用了2015版本的Update 3和.NET 4.0版本,没有任何问题。
注意 - 您可能不知道,但如果您尝试托管在文件共享上使用SQLite DLL并从工作站通过网络连接到该应用程序的应用程序,该工作站仍将需要C ++运行时,因为它是在其内存中运行应用程序。
参考: http://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q11
链接到 Microsoft Visual C ++ 2015 Redistributable Update 3 ,我知道它可以与64位.NET 4.0版本的SQLite二进制文件一起使用: https://www.microsoft.com/en-us/download/details.aspx?id=53840
答案 3 :(得分:0)
SQLite依赖于Visual C ++运行时,但不需要在客户端计算机上安装它。 system.data.sqlite下载页面包含几个已包含运行时的“静态”包。
所有“静态”包都包含静态链接到Visual C ++运行时的相应版本的本机或混合模式程序集二进制文件。通常,这些程序包用于客户机器可能没有安装必要版本的Visual C ++运行时且由于权限有限而无法安装的情况。
例如,在我的计算机上,我运行的是Windows 8.1 x64,因此我使用了 64位Windows(.NET Framework 4.0)的预编译静态链接二进制文件并下载了 sqlite-netFx40 -static-binary-x64-2010-1.0.90.0.zip 强>
此二进制包包含System.Data.SQLite 1.0.90.0(3.8.2)程序包的x64版本的所有二进制文件。 x64的Visual C ++ 2010 SP1运行时是静态链接的。 .NET Framework 4.0是必需的。
然后我解压缩包并运行 test.exe 以确保一切正常。需要零安装。