【问题标题】:Calls to SQLite work in C#/MonoDevelop but crash when program run from command line对 SQLite 的调用在 C#/MonoDevelop 中工作,但当程序从命令行运行时崩溃
【发布时间】:2013-01-02 23:27:18
【问题描述】:

在 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,版本=4.0.0.0,Culture=neutral,PublicKeyToken=0738eb9f132ed756”或其依赖项之一。该系统找不到指定的文件。 文件名:'Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756'

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

【问题讨论】:

  • 您如何准确地从命令行执行程序?
  • C:\\myprogram\bin\Debug\myprogram.exe
  • 在调用之前尝试 cding 到 C:\<path>\myprogram\bin\Debug。工作目录可能很重要。
  • 我试图从 Debug 目录内部和外部调用该程序。结果是一样的。我没有提及打印出的警告:警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。打开它是否有助于诊断问题?我从来没有听说过这个功能。

标签: c# sqlite mono monodevelop


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-02-03
    • 2019-01-15
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2018-08-11
    • 2017-06-21
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多