CEFSharp в надстройке - невозможно передать GCHandle между доменами приложений

Я программирую надстройку для Solid Edge с помощью надстройки сообщества SolidEdge. С помощью этой надстройки должен отображаться EdgeBar, содержащий веб-сайт.

Поскольку я не хочу использовать стандартный элемент управления Windows Forms WebBrowser (он использует только механизм рендеринга IE), я пытаюсь использовать Chromium Embedded Framework с его привязками .NET CEFSharp (https://github.com/cefsharp/CefSharp).

При создании нового приложения Windows Forms встраивание элемента управления CEFSharp работает нормально. Но когда я встраиваю его в свой код надстройки, я получаю следующую ошибку после запуска Solid Edge с активированным надстройкой, и программа вылетает:

Необработанное исключение типа System.ArgumentException произошло в mscorlib.dll

Дополнительная информация: невозможно передать GCHandle через домены приложений.

Я обнаружил аналогичную проблему CEFSharp, связанную с проблемой AppDomain (https://github.com/cefsharp/CefSharp/issues/351), но я не вижу решения своей проблемы.

(Примечания: целевая платформа - .NET Framework 4.5, тип вывода Библиотека классов. Я использую Visual Studio 2013, язык программирования - C #).


person muellermarkus    schedule 20.07.2015    source источник
comment
Как вы уже могли прочитать, ограничение связано с реализацией VC++. Вы можете попробовать RedGate.AppHost, как описано в github.com/cefsharp/CefSharp/issues / 351 # issuecomment-71495187 или вы можете использовать одну из P/Invoke основанных Cef фреймворков для .Net   -  person amaitland    schedule 20.07.2015
comment
Это исключение, вызванное GCHandle.FromIntPtr (). Обычно обернутый шаблоном gcroot ‹› в адаптере C ++ / CLI. Повреждение кучи, безусловно, самая распространенная причина, шоу заканчивается, когда IntPtr взламывается. Очень сложно отлаживать управляемое приложение, вы не можете установить точку останова по данным. CEFSharp решает одну проблему, добавляет три сложных решения.   -  person Hans Passant    schedule 20.07.2015


Ответы (2)


Этот запрос на перенос (https://github.com/cefsharp/CefSharp/pull/1556 ) полностью решает мою проблему. Поскольку он еще не дошел до мастера CefSharp, я его собрал сам, и все работает :-)

Будем надеяться, что это скоро будет в ветке релиза, так что никому больше не придется справляться с этой проблемой.

person muellermarkus    schedule 29.01.2016
comment
Вы случайно не пробовали протестировать его в Office (Excel-AddIn)? Я попробовал изменение Ашера в appdomainsafe и построил его локально. Затем я скопировал библиотеки DLL (в /WinForms.Example/bin/x64/Debug) в папку Debug моего проекта. Но я все еще получаю эту ошибку, imgur.com/8sTBKTQ - person Sam007; 22.03.2016
comment
К сожалению, с Office я не пробовал: - / - person muellermarkus; 17.04.2016
comment
Можете рассказать, как вы это построили? Процесс? - person Sam007; 21.04.2016
comment
Я переместил неизмененные библиотеки DLL в папку System32, чтобы они были найдены и открылись без ошибок, но теперь у меня белый экран, а адрес google.com не загружается. Любые идеи? - person Sam007; 27.04.2016

Он должен работать в Excel на случай, если кто-то захочет узнать https://github.com/cefsharp/CefSharp/issues/1191#issuecomment-215503558

person Sam007    schedule 28.04.2016