【问题标题】:Building System.Data.SQLite from Source, Builds with Target Framework 4.0从源构建 System.Data.SQLite,使用 Target Framework 4.0 构建
【发布时间】:2011-11-19 12:29:27
【问题描述】:

我正在尝试使用从

下载的源代码在 Visual Studio 中构建 System.Data.SQLite

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

我能够构建解决方案,但是当我尝试从 TargetFramework=3.5 的项目中引用 System.Data.SQLite.dll 时,我收到以下消息:

"System.Data.SQLite.dll 或其依赖项之一,需要稍后 .NET Framework 的版本高于项目中指定的版本。”

我注意到他们管理的项目(System.Data.SQLite.2010、System.Data.SQLite.Linq.2010 和 System.Data.SQLite.Module.2010)都设置为面向 .NET 4.0。然后我将它们全部更改为参考 3.5,重建并再次尝试。然后我能够引用该项目,但是我收到一个新的运行时错误:

“无法加载文件或程序集'System.Data.SQLite'或其之一 依赖关系。此程序集由比 当前已加载运行时,无法加载。”

我使用 ildasm 打开了 .dll,清单确实显示 // Metadata version: v4.0.30319 这对我来说没有意义,因为他们的文档明确指出它应该与 .NET 2.0 一起使用:

"。我们希望发布依赖于 .NET Framework 2.0 的托管二进制文件 SP2(或对于 LINQ 程序集,.NET Framework 3.5 SP1)。互联网 Framework 2.0 部署非常广泛,为其生成的二进制文件可以 也可以从使用 .NET 的项目中成功引用和使用 框架 4.0。 "

http://system.data.sqlite.org/index.html/doc/trunk/www/build.wiki

这个解决方案有点像噩梦,有大量的目标文件和大量的自定义构建选项。我不太确定目标框架的设置位置。我认为某处发生了一些神奇的事情。

有没有人有建设这个项目的经验?任何帮助,将不胜感激。谢谢!

【问题讨论】:

标签: .net visual-studio visual-c++ build system.data.sqlite


【解决方案1】:

在针对 v3.5 的 Visual Studio 2010 中构建 System.Data.SQLite 解决方案的关键是了解 VC++ 项目(SQLite.Interop.2010 和 SQLite.Interop.Static)默认针对框架版本 4.0。虽然您在 C# 项目(System.Data.SQLite.2010 和 System.Data.SQLite.Linq.2010)上正确定位了 v3.5,但可能不清楚如何为 VC++ 项目翻转目标版本。

Microsoft 建议在 VC++ 中更改框架版本的方法是从 Visual Studio 2010 中卸载项目。然后打开一个文本编辑器,在解决方案目录中找到您的 .vcxproj,并插入一个值为“”的 TargetFrameworkVersion 标记v3.5”到“Globals”PropertyGroup 标签中。在 Visual Studio 2010 中重新加载项目后,您现在应该在项目属性的框架和引用部分看到 version=3.5。 Reference Link

对于 System.Data.SQLite,您必须对两个 VC++ 项目(SQLite.Interop.2010 和 SQLite.Interop.Static)执行此操作。注意:如果您尝试将 VC++ 项目定位到 Visual Studio 2010 中的框架版本 3.5,您还需要安装 Visual Studio 2008 SP1 (VC 9.0)。此外,如果您想在 VC++ 2010 框架版本 3.5 上为 x64 进行编译,您需要在 Visual Studio 2008 SP1 (VC 9.0) 中安装 x64 编译器和工具(默认情况下未安装)。

重新编译后,ildasm 应在 System.Data.SQLite.dll 的 Manifest 中显示“元数据版本:v2.0.50727”

我确实注意到,在将 VS2010 解决方案翻转到框架版本 3.5 后,由于作者引用“属性”资源(即 Resources.resx)的方式,System.Data.SQLite.Linq.2010 中出现了一些新的构建错误在代码中。

【讨论】:

    【解决方案2】:

    这可能是由于使用 VS2010 构建造成的,我相信它默认使用 4.0 的 ToolsVersion 设置。该 zip 文件中包含 VS2008 的 MSBuild 解决方案文件(默认使用 3.5 的 ToolsVersion)。我怀疑使用 .NET 3.5 版本的 MSBuild 构建该解决方案文件将为您提供与 3.5 版本兼容的 DLL。

    "C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" ""

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2014-12-03
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      相关资源
      最近更新 更多