【问题标题】:Getting ServiceStack example to work让 ServiceStack 示例工作
【发布时间】:2012-08-13 06:23:51
【问题描述】:

我是 ServiceStack 的新手。我正在测试 MovieREST 示例。当我运行该项目时,即时窗口会显示此错误

"A first chance exception of type 'System.DllNotFoundException' occurred in Mono.Data.Sqlite.DLL"

并且没有加载任何电影列表。因此,只有一个带有一些默认输入的空白​​“添加新电影”页面,每次我点击添加新电影时,都会抛出 DllNotFoundException。

我是否需要安装任何依赖项目才能使其工作?我使用 VS2010、IIS 和 Vista 32 位运行它(是的..我知道..)。刚刚还盲目安装了Mono和sqlite 32bit,我什至不确定项目是否需要它们运行。从代码中,我可以看到它指的是“App_Data/db.sqlite”并且参考已经有 sqlite3.dll,我用我下载的 32 位替换了 dll,但仍然没有运气。

请给我一些关于我缺少什么的提示?谢谢你。

【问题讨论】:

    标签: c# .net sqlite servicestack


    【解决方案1】:

    Mono.Data.Sqlite.DLL 只是一个托管包装器,它需要找到非托管sqlite3.dll 才能运行(它包含 Sqlite 本身的本机二进制文件)。

    它会在 /bin 目录中查找它,以便在您构建时将其部署到那里,您需要将 sqlite3.dll 复制到您的项目根目录 / 并将 Build Action 设置为 内容并将复制操作更改为Copy if newer

    理想情况下,您希望为您的架构使用正确的sqlite3.dllServiceStack.OrmLite.Sqlite.Mono NuGet 包包含 32 位/64 位 dll),尽管 IIS/.NET 可以使用 32 位非托管 dll,但 require some tweaking explained here

    使用混合模式程序集

    虽然Mono.Data.Sqlite.DLL 允许您在 Mono 上运行相同的 .NET 应用程序,但如果您只想在 Windows 中运行 Sqlite,您还可以使用在 .NET dll 中嵌入了非托管本机 sqlite 库的混合模式程序集。 NuGet 上有 2 个不同的版本:

    删除对现有 OrmLite 或 Sqlite dll 的任何引用,因为这两个 NuGet 包都包含所需的所有 Sqlite + OrmLite dll。

    【讨论】:

    • 您好,mythz 感谢您查看我的问题! :D 当我编译它时,我有项目本身生成的 sqlite3.dll (492kb)。还尝试了 NuGet 包 sqlite3.dll (x86 585kb)。我将它们逐个放入 /bin/ 文件夹中。两者似乎都向我抛出了相同的 DllNotFoundException,但 sqlite3.dll 32 位版本就在同一个文件夹中的 Mono.Data.Sqlite.dll 旁边。我查看了调整解释的帖子,这似乎是一个 64 位电脑问题,需要启用 32 位应用程序。
    • 更新:还在项目根目录/也尝试了快捷方式和实际 sqlite3.dll(如果更新,则作为内容副本)。同样的 DllNotFoundException。
    • 它应该就是这样工作的,我已经添加了一些关于如何使用混合模式程序集的注释。它们的活动部件较少,因此您应该更成功。
    • 如您所说,我删除了示例文件夹的 lib/ 文件夹,并使用 nuget 更新了项目缺少的引用,删除了 root / sqlite3.dll 引用链接。然后一切正常:D 我看到演示工作。稍后将处理单声道,一次一步!非常感谢您的帮助神话!
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2020-12-10
    • 1970-01-01
    • 2023-03-26
    • 2011-06-08
    • 2023-04-11
    • 2012-06-19
    • 2013-11-26
    相关资源
    最近更新 更多