System.IO.FileLoadException:无法加载文件或程序集'System.Data.SQLite

mjb*_*mjb 14 c# system.data.sqlite winforms

(这是一个重复的问题,已在stackoverflow.com中提出.我已经阅读了答案.我已经尝试了解决方案,但这并没有解决我的问题.我将解释我的问题是什么以及有什么问题我做完了).

这是我的问题:

我的应用程序使用System.Data.SQLite.DLL.我引用它并在我的计算机中正常运行,但它无法在另一台计算机上运行.这是错误消息:

System.IO.FileLoadException:无法加载文件或程序集'System.Data.SQLite,Version = 1.0.88.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.应用程序无法启动,因为它的并排
配置不正确.有关更多详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具.
(来自HRESULT的异常:0x800736B1)文件名:'System.Data.SQLite,Version = 1.0.88.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'---> System.Runtime.InteropServices.COMException(0x800736B1):应用程序失败开始,因为它的并排
配置不正确.有关更多详细信息,请参阅应用程序事件日志或使用命令行sxstrace.exe工具.
(来自HRESULT的异常:0x800736B1)SimPB.config.PrepareDatabase(),位于SimPB.Program.Main()的SimPB.config.InitializeProgram()

我的电脑运行Windows 7 32位,Visual Studio 2010.

另一台计算机也运行Windows 7 32位,没有安装Visual Studio.

我尝试过的:

尝试1:确保使用Release + x86构建应用程序,并使用目标框架构建应用程序:.NET Framework 2.0.完成.

尝试2:确保使用正确版本的System.Data.SQLite引用该应用程序,该版本是x86 + .Net Framework 2.0(sqlite-netFx20-binary-Win32-2005-1.0.88.0).完成

尝试3:在App.config上尝试这些代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

还有这个

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

还有这个

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

完成.

尝试4:尝试关闭另一台计算机上的用户帐户控制.完成.

尝试5:尝试在另一台计算机上安装Visual C++ Runtime(我安装了Visual Microsoft Visual C++ Runtime 2010 Redistributable Package(x86),也尝试了2005版本.).完成.

尝试6:尝试重新安装.NET Framework 2.0 SP2.收到错误:

您必须使用"控制面板"中的"打开或关闭Windows功能"来安装或配置Microsoft .NET Framework 2.0 SP2.

更新:(阅读答案和评论后)
尝试7:确保System.Data.SQLite.DLL位于输出bin文件夹中.完成

尝试8:双重确认另一台计算机正在运行32位Windows 7.完成

尝试9:更改.csproj文件中的HintPath声明:
更改:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>E:\Developer Soft\SQLite\sqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0\System.Data.SQLite.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

对此:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>..\System.Data.SQLite.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

完成尝试9.

经过上述尝试后,结果仍然相同.应用程序可以正常从我的计算机运行,无法在另一台计算机上运行.

这是一个开源免费软件,简单电话簿.我已经提交并上传了最新的源代码到它的源代码控制服务器:
http://simpb.codeplex.com/SourceControl/list/changesets(变更号码:fd847ac6c406)

Cri*_*scu 6

由于.csproj文件中的HintPath声明,无法找到程序集:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>E:\Developer Soft\SQLite\sqlite-netFx20-binary-bundle-Win32-2005-1.0.88.0\System.Data.SQLite.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

它适用于您的计算机,因为您在该位置确实拥有.dll.但是,其他人可能希望使用放置在存储库根目录中的System.Data.SQLite.dll文件.由于这是.csproj的一个级别,您可以使用相对路径,如下所示:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>..\System.Data.SQLite.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

它应该工作正常.


mjb*_*mjb 6

我已经解决了这个问题.这是我解决的方法:

简短的故事:
使用旧版本的System.Data.SQLite.怀疑新版本有错误(我可能是错的).

长话故事:
我开始回想起为什么我之前的旧版本程序能够在其他计算机上执行,而这个新版本不能.我做了哪些明显的改变?

是的,我已经更改了System.Data.SQLite的版本.

该程序使用的旧版System.Data.SQLite是V1.0.66.我使用的新版本是最新版本:V1.0.88,于20138月8日发布.(是的,这是从今天起大约4天前).阅读更多:http://system.data.sqlite.org/index.html/timeline

然后我决定放弃新版本(V1.0.88)并使用旧版本(V1.0.66),一切恢复正常.该程序再次在另一台计算机上执行.

我试着看一下V1.0.88的源代码,但是我找不到导致问题的代码行.我能发现的最好的是System.Data.SQLite.Interop的项目.当我在Visual Studio 2010中加载解决方案时,System.Data.SQLite.Interop预设为.NET Framework 4.0构建.我不知道如何改变它.稍后,我在Visual Studio 2008中重新加载解决方案,System.Data.SQLite.Interop的常见属性显示它将为.NET Framework 2.0构建(这是我正在寻找的),但是我无法构建解决方案.发生一些构建错误.我没有花时间来调试它.

我需要为.NET Framework 2.0开发程序,因为有些用户仍在使用Windows XP.

我假设V1.0.88包含错误,但我可能错了.无论如何,对于当前的解决方案,我只是坚持V1.0.66.