3

问题:

我正在构建 ac# 4.0,基于 MVC 3 的网络应用程序。我使用 SQLite 作为数据库。

当我启动应用程序时,我收到此错误:

无法加载文件或程序集“System.Data.SQLite”或其依赖项之一。试图加载格式不正确的程序。

这是融合装配载荷跟踪:

=== Pre-bind state information ===
LOG: User = Steve-PC\Steve
LOG: DisplayName = System.Data.SQLite
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: System.Data.SQLite | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Users/Steve/Documents/Visual Studio 2010/Projects/EMMA3/EMMA_Web/
LOG: Initial PrivatePath = C:\Users\Steve\Documents\Visual Studio 2010\Projects\EMMA3\EMMA_Web\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Steve\Documents\Visual Studio 2010\Projects\EMMA3\EMMA_Web\web.config
LOG: Using host configuration file: C:\Users\Steve\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/Steve/AppData/Local/Temp/Temporary ASP.NET Files/root/6454c2d1/d37faccb/System.Data.SQLite.DLL.
LOG: Attempting download of new URL file:///C:/Users/Steve/AppData/Local/Temp/Temporary ASP.NET     Files/root/6454c2d1/d37faccb/System.Data.SQLite/System.Data.SQLite.DLL.
LOG: Attempting download of new URL file:///C:/Users/Steve/Documents/Visual Studio 2010/Projects/EMMA3/EMMA_Web/bin/System.Data.SQLite.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

我在用:

Windows 7 x64 Visual Web Developer 2010 IIS Express 7.5 System.Data.SQLite x64 1.0.77.0

我用谷歌搜索了很多,一般认为这与在 64 位系统上运行 32 位程序集有关,反之亦然。

我尝试过的事情:

  1. 从 VS 内置的 Web 服务器切换到 IIS Express。显然,内置服务器只能处理 32 位应用程序,而 IIS Express 两者都可以。不用找了。
  2. 确保您使用的是 64 位版本的 SQLite。本来我用的是普通版,但是改成64位版好像没什么用。
  3. 在 IIS 中启用“win 64 上的 32 位应用程序”设置。(在 IIS express 中,这是使用 appcmd.exe - appcmd set apppool /apppool.name: "" /enable32bitapponwin64:true 完成的)。同样,这没有改变。
  4. 卸载/重新安装 Sqlite。不用找了。
  5. 创建一个更简单的项目版本,以确保一切都是干净的并缩小原因。这导致我进入下面的“复制步骤”,但并没有真正帮助我。

重现步骤:

  1. 创建新的 MVC 3 Web 项目。
  2. 运行它并查看它是否有效。
  3. 使用 Nuget 添加对 SQLite x64 的引用。
  4. 再次运行站点,它会给出这个错误。

总而言之 - 我收到上面的错误,这肯定是由于 SQLite 的某种原因,我似乎拥有 64 位的所有内容,但它仍然无法正常工作。有任何想法吗?

提前致谢。

4

2 回答 2

1

前段时间想通了,忘记了这个问题。

答案是删除 SQLite x64 并安装 SQLite x86……就这么简单。当我在 64 位版本的 Windows 上构建 64 位程序集时,这似乎很奇怪,但我们开始了。实际具有数据访问逻辑的类库仍然引用 64 位版本的 SQLite,但由于某种原因,实际的 Web 项目必须引用 32 位版本。

于 2011-12-07T22:25:21.823 回答
1

如果您在尝试从 VisualStudio 中运行 Web 应用程序时收到此错误,那是因为内置 Web 服务器仅为 32 位。如果您希望在 VisualStudio 中使用 64 位调试/运行,请查看 Cassini 项目。有构建 64 位版本的 cassini 并使用它而不是 VisualStudio 默认 Web 服务器的说明。

于 2012-05-11T15:10:08.607 回答