Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Mono/Windows上使用Gecko sharp嵌入Gecko?_C#_.net_Mono_Gecko - Fatal编程技术网

C# 如何在Mono/Windows上使用Gecko sharp嵌入Gecko?

C# 如何在Mono/Windows上使用Gecko sharp嵌入Gecko?,c#,.net,mono,gecko,C#,.net,Mono,Gecko,Gecko是Firefox的渲染引擎。使用gecko sharp,可以将其嵌入任何Mono/GTK程序。有一个示例应用程序用于执行此操作。我可以使用修改过的项目文件来构建它,但它正在崩溃。这将帮助您重现问题: 我使用了和来设置我的安装。我确保它使用ProcMon调用Mono的gmc进行编译。在设置SharpDevelop之后,必须对其进行修改,以便使用Mono进行编译 还有一条警告消息: 发现不同客户之间的冲突 同一依赖项的版本 大会 这很奇怪,因为所有的程序集都是由Mono提供的 当然,还有其

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

我使用了和来设置我的安装。我确保它使用ProcMon调用Mono的gmc进行编译。在设置SharpDevelop之后,必须对其进行修改,以便使用Mono进行编译

还有一条警告消息:

发现不同客户之间的冲突 同一依赖项的版本 大会

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


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

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

mono—调试BrowserSharp.exe 使用--debug标志,mono将打印出任何未处理的异常:

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 () ... 未处理的异常:System.TypeInitializationException: Gecko.WebControl的类型初始值设定项引发异常---> System.DllNotFoundException:gtkembedmoz.dll at(包装器管理为本机)Gecko.WebControl:gtk_moz_embed_get_type() ... 我在Mono发行版中找不到gtkembedmoz.dll,但它似乎是单独安装的。可以找到下载链接,以及一些旧的但可能有用的说明

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


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

解决交叉兼容性问题的更好方法可能是Mono.WebBrowser,因为它最终可能是独立于引擎的

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 () ...