7

Gecko 是 Firefox 的渲染引擎。使用 gecko-sharp 可以将其嵌入到任何 Mono/GTK# 程序中。有一个名为GladeSharpBrowser的示例应用程序可以执行此操作。我可以设法使用修改后的项目文件来构建它,但它正在崩溃。这将帮助您重现问题:

我使用了SharpDevelop 3.0和一个教程来设置我的Mono 2.2安装。我确保它调用 Mono 的 gmcs 以使用 ProcMon 进行编译。设置 SharpDevelop 后,必须修改BrowserSharp.csproj以便它与 Mono 一起编译。

还有一条警告信息:

发现同一依赖程序集的不同版本之间存在冲突。

这很奇怪,因为所有的程序集都是 Mono 提供的。

当然,还有其他方法,例如 GeckoFX,但我特别感兴趣的是使用 Mono 以独立于平台的方式进行操作。

4

2 回答 2

2

Mono.WebBrowser 可能是对您的交叉兼容性问题更好的答案,因为它最终可能独立于引擎。

http://www.mono-project.com/WebBrowser

于 2009-02-12T11:50:32.797 回答
1

解决问题的第一步是找出它崩溃的原因。根据您的说明构建 BrowserSharp 后(尽管我单独重新创建了 csproj),我运行:

mono --debug BrowserSharp.exe

使用 --debug 标志,mono 将打印出任何未处理的异常:

未处理的异常:System.TypeInitializationException:
Gecko.WebControl 的类型初始化程序引发了异常 --->
System.DllNotFoundException:gtkembedmoz.dll   
   在(包装器托管到本机)Gecko.WebControl:gtk_moz_embed_get_type ()
   ...

我在 Mono 发行版中找不到 gtkembedmoz.dll,但它似乎是一个单独的安装。可以在此处找到下载链接,并在此处找到一些旧的但可能有用的说明

我下载了稳定的 GRE 包并将 gtkembedmoz.dll 复制到构建目录中。它仍然崩溃,所以我使用depends.exe检查了依赖项,这清楚地表明它缺少Gtk+ 库。在安装gtk-sharp运行时并将丢失的 dll 复制到构建目录后,我设法让它使用 Microsoft .NET 运行时运行。

由于某种原因,它仍然无法使用 Mono。我怀疑 Mono 搜索非托管 DLL 的方式存在一些差异,但我没有对此进行研究。无论您是否使用 Microsoft.NET 的 Mono,您可能都不需要将这些 DLL 复制到构建目录中,只需确保它们已正确安装/配置,以便找到它们。

于 2009-02-12T11:08:30.633 回答