调用SQLite在C#/ MonoDevelop中工作但在程序从命令行运行时崩溃

时间:2013-01-02 23:27:19

标签: c# sqlite mono monodevelop

在Windows 7上使用SQLite 4.0在MonoDevelop 3.0.5和Mono 2.10.9上进行开发。使用C#和Mono为我的活动运行时设置。目标框架是Mono / .NET 4.0。

我的架构脚本可以很好地加载到SQLite中,我可以在命令行从sqlite3.exe / sqlite3.dll访问它,没有任何问题。当我从MonoDevelop IDE中执行代码(运行和调试工作正常)时,我可以连接到数据库并执行select / update / insert和从我的C#代码调用count和last_insert_row_id等函数。

当我尝试从命令行执行代码并调用myprogram.exe时,程序在第一次数据库调用时崩溃。来自例外的重要数据似乎是:

System.IO.FileNotFoundException:无法加载文件或程序集“Mono.Data.Sqlite,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 0738eb9f132ed756”或其依赖项之一。该系统找不到指定的文件。 文件名:'Mono.Data.Sqlite,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 0738eb9f132ed756'

数据库和sqlite3.dll与myprogram.exe位于同一目录中。这似乎是一个系统配置问题,这不是我的强项。希望对于我在开发机器上配置失败的人来说很明显。

1 个答案:

答案 0 :(得分:0)

如果您运行的是Windows 7 x64,请注意位数。

在MonoDevelop(32位)中运行时,您的应用程序(编译为任何CPU)将以32位进程启动。所以当你说它运行正常时,这意味着它在32位模式下运行良好。

在命令提示符下(cmd.exe,默认为64位),您的应用程序将自动在64位模式下运行。如果在这种情况下失败,则意味着您将不得不使用64位SQLite内容(64位sqlite3.dll和64位ADO.NET提供程序程序集)。这应该在SQLite网站上的其他地方或ADO.NET提供程序程序集文档中明确说明。