如何在Mono/Windows上使用gecko-sharp嵌入Gecko?

问题描述:

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

我已经使用SharpDevelop 3.0tutorial来设置它与我的Mono 2.2安装。我确定它使用ProcMon来调用Mono的gmcs进行编译。设置SharpDevelop后,BrowserSharp.csproj必须进行修改,以便与Mono进行编译。

还有一个警告消息:

不同 版本的相同依赖性 组件的实测值之间的冲突。

这很奇怪,因为所有的组件都是由Mono提供的。

当然,还有像GeckoFX这样的其他方法,但我特别感兴趣的是以独立于平台的方式使用Mono来完成它。

解决您的问题的第一步是弄清楚它为什么会崩溃。根据您的指令(虽然我单独重新创建的csproj)建设BrowserSharp后,我跑:

mono --debug BrowserSharp.exe

随着--debug标志,单会打印出任何未处理的异常:

 
Unhandled Exception: System.TypeInitializationException: 
An exception was thrown by the type initializer for Gecko.WebControl ---> 
System.DllNotFoundException: gtkembedmoz.dll 
    at (wrapper managed-to-native) Gecko.WebControl:gtk_moz_embed_get_type() 
    ... 

我不能在Mono发行版中找不到gtkembedmoz.dll,但似乎是单独安装。下载链接可以找到here,以及一些旧的但可能有用的指令here

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

由于某些原因,它仍然无法使用Mono。我怀疑Mono如何搜索非托管DLL有一些不同,但我没有看到这一点。无论您使用的是Microsoft.NET的Mono,您可能都不需要将这些DLL复制到构建目录中,只需确保它们已正确安装/配置即可找到。

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

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