繁体   English   中英

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

[英]System.IO.FileLoadException: Could not load file or assembly 'System.Data.SQLite

(这是一个重复的问题,已在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>

和这个

<?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>

和这个

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

完成。

尝试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>

对此:

<Reference Include="System.Data.SQLite, Version=1.0.88.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <HintPath>..\System.Data.SQLite.dll</HintPath>
</Reference>

完成尝试9。

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

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

由于.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>

它适用于您的计算机,因为您在该位置确实拥有.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>

它应该工作正常。

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

短篇故事:
使用旧版本的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

自x64 / x86机器中的v1.0.66起,我也遇到过SQLite问题。 我从来没有能够使用nuget包安装ServiceStack和SqLite.x86,并且开箱即用。

但是今天我已经成功地改变了安装过程,它也可能是一个解决方案。 我怀疑问题是因为System.Data.SQlite的版本与Servicestack.Ormlite.SqliteNET所期望的版本不一致。

Nuget控制台中的下一个过程使我的工作正常:

Install-Package System.Data.Sqlite.x86 -Version 1.0.88.0
Install-Package ServiceStack -Version 3.9.71
Install-Package ServiceStack.OrmLite.Sqlite32 -Version 3.9.71

在App.config文件中,在<configuration>元素中添加以下行:
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>

检查MS Visual C ++是否运行可再发行安装,因为System.Data.SQLite依赖于它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM