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

Kal*_*evi 6 .net c# mono gecko

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

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

还有一条警告信息:

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

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

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

Dav*_*ave 1

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

单声道——调试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 复制到构建目录中,只需确保它们正确安装/配置以便可以找到它们即可。