C# 为什么要安装Microsoft Visual C++;2010年可再发行软件包x86是否使用SQLite?

C# 为什么要安装Microsoft Visual C++;2010年可再发行软件包x86是否使用SQLite?,c#,sqlite,visual-c++,C#,Sqlite,Visual C++,我用C#和SQLite编写了windows应用程序。当微软Visual C++ 2010可重新分配包X86安装在PC应用程序上时,运行正确,但如果微软Visual C++ 2010可重新分配包X86不安装,应用程序就无法运行。为什么? SQLite依赖于微软Visual C++ 2010可再分发包X86? 是的。SQLite大概是用C++编写的。它是使用/MD选项编译的,这意味着它在运行时需要msvcrt#.dll。RealBuffIT包安装在它上面,它不能运行 SQLite取决于Visual

我用C#和SQLite编写了windows应用程序。当微软Visual C++ 2010可重新分配包X86安装在PC应用程序上时,运行正确,但如果微软Visual C++ 2010可重新分配包X86不安装,应用程序就无法运行。为什么?

SQLite依赖于微软Visual C++ 2010可再分发包X86? 是的。SQLite大概是用C++编写的。它是使用/MD选项编译的,这意味着它在运行时需要msvcrt#.dll。RealBuffIT包安装在它上面,它不能运行

SQLite取决于VisualC++运行时,但是<>强>不要>需要安装在客户端机器上。下载页面包含几个已经包含运行时的“静态”包

所有的“静态”包都包含静态或静态的VisualC++运行时版本的本地或混合模式汇编二进制文件。通常,在客户机可能没有安装必要的VisualC++运行时版本,并且由于特权有限而无法安装时,这些包被使用。 例如,在我的机器上,我运行的是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,以确保一切正常。零安装需要。

< P>因为SQLite明显发展了C++中的SQLite.Interop.dll,因为他们这样说:

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

无法找到命名的动态链接库(DLL),或者由于缺少依赖项而无法加载该库。请确保命名的动态链接库位于应用程序目录或系统路径上的目录中,然后重试。另外,确保您已经安装了必要的VisualC++运行时重新分发,除非您使用的是静态链接库,该动态链接库是静态链接到它的。 我要强调最后一部分。你需要静态二进制文件,以便不需要C++运行时。在同一页上,在提供二进制文件的情况下,那些需要它的人会告诉你,例如,对于4,需要X64的Visual C++ 2010 SP1运行时,并且根据该页面需要更新.NET 4.5的4。我已经使用了2015版本,更新3,以及没有问题的.NET 4.0版本

注意-您可能不知道,但是如果您尝试托管一个应用程序,该应用程序使用SQLite DLL在文件共享上,并通过工作站连接到网络上的应用程序,那么工作站仍然需要C++运行时,因为它在内存中运行应用程序。 参考资料:

<链接> <强>微软Visual C++ 2015可重分发更新3 <强>,我知道它与SQLite二进制文件的64位.NET 4版本一起工作:
微软Visual C++ 2010可重新分配包X86安装.NET版本4?我不知道。但我认为.NET包不包括C运行库,是.NET不包含C++可再分发包。这完全是另一回事。NET框架编译用.NET编写的代码。C++可重分发是一个“运行时”,这意味着它需要编译代码并运行它——就像java有JRE一样。C++代码是.NET代码之前的。是不是说不指定/MD意味着库不需要MsCRT?从文档中可以看出,所有可用的值都以某种方式使用运行时库。如果C或C++程序是用/MT代替微软编译的,那么他们不需要运行时,因为他们使用了编译成代码的静态库。问题是你必须确保下载正确的包。如果您只是从其他开发人员或公司使用的文件共享处获得它,则很难知道您拥有哪个包/DLL,除非您尝试运行引用它的应用程序。对于我所拥有的SqLy.Iopop.dl程序集,它是必需的——没有C++可重新分配,它给了我错误,无法找到程序集。安装后,错误消失,工作正常。