2009-01-26 13 views
6

Gecko ist die Rendering-Engine für Firefox. Mit Gecko-Sharp ist es möglich, es in jedes Mono/GTK # Programm einzubetten. Dazu gibt es eine Beispielanwendung namens GladeSharpBrowser. Ich könnte es mit einer modifizierten Projektdatei erstellen, aber es stürzt ab. Dies hilft Ihnen, das Problem zu reproduzieren:Wie verbinde ich Gecko mit Gecko-Sharp auf Mono/Windows?

Ich habe SharpDevelop 3.0 und tutorial verwendet, um es mit meiner Mono 2.2 Installation einzurichten. Ich habe sichergestellt, dass es Monos GMCs zur Kompilierung mit ProcMon aufruft. Nach dem Einrichten von SharpDevelop musste der BrowserSharp.csproj geändert werden, so dass er mit Mono kompiliert wird.

Es gibt auch eine Warnmeldung:

gefunden Konflikte zwischen verschiedenen Versionen der gleichen abhängigen Montage.

Dies ist seltsam, da alle Baugruppen von Mono bereitgestellt werden.

Sicher, es gibt andere Methoden wie GeckoFX, aber ich bin speziell daran interessiert, es in einer plattformunabhängigen Art und Weise mit Mono zu tun.

Antwort

1

Der erste Schritt zur Lösung Ihres Problems ist herauszufinden, warum es stürzt. Nach dem Aufbau BrowserSharp nach Ihren Vorgaben (obwohl ich die csproj separat neu), lief ich:

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

Ich kann:

mono --debug BrowserSharp.exe

Mit der --debug Flagge, Mono jede nicht behandelte Ausnahme drucken werden tt finden gtkembedmoz.dll in der Mono-Distribution, aber es scheint eine separate Installation zu sein. Ein Download-Link kann here gefunden werden, und einige alte, aber möglicherweise nützliche Anweisungen here.

Ich habe das stabile GRE-Paket heruntergeladen und die gtkembedmoz.dll in das Build-Verzeichnis kopiert. Es stürzte immer noch ab, also überprüfte ich die Abhängigkeiten unter Verwendung von depends.exe, was deutlich machte, dass die Gtk + -Libs fehlten. Nach der Installation der gtk-sharp Laufzeit und dem Kopieren der fehlenden DLLs in das Build-Verzeichnis habe ich es geschafft, es mit der Microsoft .NET Runtime laufen zu lassen.

Aus irgendeinem Grund funktionierte es immer noch nicht mit Mono. Ich vermute, dass es einen Unterschied gibt, wie Mono nach nicht verwalteten DLLs sucht, aber ich habe mich nicht damit befasst. Unabhängig davon, ob Sie Mono von Microsoft.NET verwenden, sollten Sie diese DLLs wahrscheinlich nicht in das Build-Verzeichnis kopieren müssen, es muss nur sichergestellt werden, dass sie ordnungsgemäß installiert/konfiguriert sind, damit sie gefunden werden.