Встраивание CefSharp в плагин для Revit

У меня возникают проблемы с внедрением CefSharp (WPF) в надстройку для Revit:

  1. Моя надстройка не может быть загружена Revit, если все файлы не находятся в папке Revit вместе с основным исполняемым файлом. Это нехорошо, потому что портит все файлы Revit. Я пытался установить переменную env PATH в свою личную папку, но это не работает. Любые идеи, как сделать мои библиотеки загружаемыми? Я не эксперт по сборкам .NET и т.д...
  2. CEFSharp в надстройке отображает веб-страницы, но иногда они мерцают. Есть ли флаг для установки?
  3. CEFSharp в надстройке отказывается отображать WebGL. Какой флаг поставить?

Примечание: вне Revit CEFSharp работает нормально (пробовал MinimalExample.WPF)


person Marco Fiocco    schedule 03.08.2016    source источник


Ответы (2)


В первой части вашего вопроса вам нужно подписаться на событие AppDomain.AssemblyResolve и указать программе расположение ваших DLL-файлов. В качестве альтернативы можно вручную загрузить библиотеки DLL в методе IExternalApplication.OnStartup с помощью команды Assembly.Load.

Дополнительные сведения о событии AssemblyResolve см. здесь: https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve(v=vs.110).aspx

person Colin Stark    schedule 03.08.2016

Я только что сделал то же самое, и это работает очень хорошо

У меня есть закрепляемые окна CEF (WPF) в Revit2018, следуя образцу DockableDialogs в Revit 2018.2.

SDK можно найти здесь: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=2484975)

В настоящее время я использую CEFSharp.Wpf версии 57.0.0.0.

И да, вы должны переназначить Cef третьим сторонам следующим образом:

CefSettings settings = new CefSettings(); settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache"); string rootPath = FileUtility.GetAssemblyPath(); settings.BrowserSubprocessPath = Path.Combine(rootPath, "CefSharp.BrowserSubprocess.exe"); settings.LocalesDirPath = Path.Combine(rootPath, "locales"); settings.ResourcesDirPath = Path.Combine(rootPath); Cef.EnableHighDPISupport(); //settings.CefCommandLineArgs.Add("disable-gpu", "1"); Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);

Не забудьте вызвать Cef.Shutdown(); в конце тоже

person chtimi59    schedule 18.01.2018