c# - 让 ServiceStack 示例工作

标签 c# .net sqlite servicestack

我是 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,但仍然没有运气。

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

最佳答案

Mono.Data.Sqlite.DLL只是一个托管包装器,需要找到非托管 sqlite3.dll为了运行(这是保存 Sqlite 本身的 native 二进制文件的内容)。

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

理想情况下,您希望使用正确的 sqlite3.dll对于您的体系结构(ServiceStack.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 中嵌入非托管 native sqlite 库的混合模式程序集。 NuGet 上有 2 个不同的版本:

  • ServiceStack.OrmLite.Sqlite32
  • ServiceStack.OrmLite.Sqlite64

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

    关于c# - 让 ServiceStack 示例工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11929105/

    相关文章:

    .net - 如何找出某个时区和特定年份 DST 开始/结束的实际时间?

    c# - .NET 动态 DLL 加载和安全

    c# - 在哪里可以找到有关为 SQL Server Management Studio 创建插件的信息?

    python - 本地安装python

    iphone - 从 XCode 中的 SQLite 数据库获取一定半径内的所有位置

    c# - 从 EF6 迁移到 EF Core 2.0

    c# - 单击行上的按钮时在 C# Gridview 中获取单元格值

    c# - Delphi 扩展到 C#

    c# - 对 MVC 操作的 JQuery ajax 调用总是在没有错误时返回错误

    java - 在 Onclick 方法中捕获数据库 ID