Как встроить Gecko с помощью gecko-sharp в Mono / Windows?

Gecko - это движок рендеринга для Firefox. Используя gecko-sharp, его можно встроить в любую программу Mono / GTK #. Для этого есть образец приложения под названием GladeSharpBrowser. Мне удалось собрать его, используя измененный файл проекта, но он дает сбой. Это может помочь вам воспроизвести проблему:

Я использовал SharpDevelop 3.0 и руководство, чтобы настроить его с помощью моего Установка Mono 2.2. Я убедился, что он вызывает gmcs Mono для компиляции с использованием ProcMon. После настройки SharpDevelop необходимо изменить BrowserSharp.csproj, чтобы он компилировался с Mono.

Также есть предупреждающее сообщение:

Обнаружены конфликты между разными версиями одной и той же зависимой сборки.

Это странно, поскольку все сборки предоставлены Mono.

Конечно, есть и другие методы, такие как GeckoFX, но я особенно заинтересован в том, чтобы делать это независимо от платформы с помощью Mono.


person Kalevi    schedule 26.01.2009    source источник


Ответы (2)


Вероятно, лучший ответ на вашу проблему кросс-совместимости - это Mono.WebBrowser, поскольку в конечном итоге он может быть независимым от движка.

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

person kkubasik    schedule 12.02.2009

Первый шаг к решению вашей проблемы - выяснить, почему он дает сбой. После сборки BrowserSharp в соответствии с вашими инструкциями (хотя я воссоздал csproj отдельно), я запустил:

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

Мне не удалось найти gtkembedmoz.dll в дистрибутиве Mono, но, похоже, это отдельная установка. Ссылку для загрузки можно найти здесь, а также некоторые старые, но, возможно, полезные инструкции здесь.

Я загрузил стабильный пакет GRE и скопировал файл gtkembedmoz.dll в каталог сборки. Он по-прежнему аварийно завершал работу, поэтому я проверил зависимости с помощью depends.exe, что дало понять, что ему не хватает Gtk + библиотеки. После установки среды выполнения gtk-sharp и копирования недостающих dll в сборку каталог, который мне удалось запустить, используя среду выполнения Microsoft .NET.

По какой-то причине он все еще не работал с Mono. Я подозреваю, что есть некоторая разница в том, как Mono ищет неуправляемые библиотеки DLL, но я не рассматривал это. Независимо от того, используете ли вы Mono из Microsoft.NET, вам, вероятно, не нужно копировать эти DLL в каталог сборки, просто нужно убедиться, что они установлены / настроены правильно, чтобы их можно было найти.

person Dave    schedule 12.02.2009