2

我用 C# 和 SQLite 编写了 Windows 应用程序。当 Microsoft Visual C++ 2010 Redistributable Package x86 安装在 PC 上时,应用程序运行正常,但如果 Microsoft Visual C++ 2010 Redistributable Package x86 未安装,则应用程序无法运行。为什么?
SQLite 是否依赖于 Microsoft Visual C++ 2010 Redistributable Package x86 ?

4

4 回答 4

5

SQLite 的版本是 VS2010 编译的,它依赖于 C 运行时库,因此它需要 Visual C++ 2010 Redistributable Package x86。

于 2012-11-12T08:06:56.103 回答
1

是的。SQLite 可能是用 C++ 编写的。它使用 /MD 选项编译,这意味着它在运行时需要 msvcrt#.dll。Retributable Package 安装了它,没有它它就无法运行

于 2012-11-12T08:07:32.473 回答
1

因为 SQLite 显然是用 C++ 开发了 SQLite.Interop.dll,而且他们这样说:

(11) 为什么在尝试运行我的应用程序时会出现 DllNotFoundException(对于“sqlite3.dll”或“SQLite.Interop.dll”)?

找不到指定的动态链接库 (DLL),或者由于缺少依赖项而无法加载它。确保命名的动态链接库位于应用程序目录或系统 PATH 沿线的目录中,然后重试。此外,请确保已安装必要的 Visual C++ 运行时可再发行组件,除非您使用的是静态链接到它的动态链接库。

强调我的最后一部分。您需要system.data.sqlite 下载页面中的静态二进制文件,以便不需要 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,我知道它适用于 SQLite 二进制文件的 64 位 .NET 4.0 版本: https ://www.microsoft.com/en-us/download/details.aspx?id =53840

于 2017-02-21T21:31:58.673 回答
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。拉链

此二进制包包含 x64 版本的 System.Data.SQLite 1.0.90.0 (3.8.2) 包的所有二进制文件。x64 的 Visual C++ 2010 SP1 运行时是静态链接的。需要 .NET Framework 4.0。

然后我解压缩包并运行test.exe以确保一切正常。需要零安装。

于 2014-01-03T18:19:27.983 回答