【发布时间】:2013-08-13 09:53:20
【问题描述】:
(这是一个重复的问题,已在 stackoverflow.com 中提出。我已阅读答案。我尝试了解决方案,但这并没有解决我的问题。我将解释我的问题是什么以及我做了什么)。
这是我的问题:
我的应用程序使用了 System.Data.SQLite.DLL。我引用它并在我的计算机上正常运行,但它无法在另一台计算机上运行。这是错误信息:
System.IO.FileLoadException:无法加载文件或程序集 'System.Data.SQLite,版本=1.0.88.0,文化=中性, PublicKeyToken=db937bc2d44ff139' 或其依赖项之一。 应用程序无法启动,因为它并排
配置不正确。请看申请活动 登录或使用命令行 sxstrace.exe 工具了解更多详细信息。
(来自 HRESULT 的异常:0x800736B1)文件名:'System.Data.SQLite, 版本=1.0.88.0,文化=中性,PublicKeyToken=db937bc2d44ff139' ---> System.Runtime.InteropServices.COMException (0x800736B1): 应用程序无法启动,因为它并排
配置不正确。请查看应用程序事件日志或 使用命令行 sxstrace.exe 工具了解更多详细信息。
(来自 HRESULT 的异常:0x800736B1) 在 SimPB.config.PrepareDatabase() 在 SimPB.config.InitializeProgram() 在 SimPB.Program.Main()
我的电脑运行的是 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。
更新:(阅读答案和 cmets 后)
尝试 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 次尝试完成。
经过以上尝试,结果还是一样。该应用程序可以在我的计算机上正常运行,但在另一台计算机上运行失败。
这是一个开源的免费软件,Simple Phone Book。我已将最新的源代码提交并上传到它的源代码控制服务器:
http://simpb.codeplex.com/SourceControl/list/changesets(变更集编号:fd847ac6c406)
【问题讨论】:
-
检查这个 dll(System.Data.SQLite.DLL) 是否被复制并出现在你的 bin 文件夹中
-
您确定另一台计算机没有运行 64 位吗?
-
@SWeko,是的,我确定另一台计算机没有运行 64 位。顺便问一下,您能帮我验证一下该应用程序是否可以在您的计算机上运行?您是否收到相同的错误消息?谢谢。可在此处下载:simpb.codeplex.com/releases
-
嗯.. 不确定程序集解析器查看的顺序是什么,但您可以检查它是否在输出目录之前在 GAC 中查找程序集,如果是,则从那里删除任何 SQLite 程序集。
-
@Mithon 您好,由于我的目标是开发便携式软件,因此在 GAC 中安装程序集不是解决方案,但我感谢您的建议 :) 我已经解决了问题,您可以请参阅下面的答案。
标签: c# winforms system.data.sqlite