在Rhino插件的WPF窗口中使用CefSharp报MissingMethodException如何解决
问题根因
你遇到的System.MissingMethodException错误核心是 CefSharp相关依赖包版本不匹配,其次存在Cef初始化逻辑错误、运行环境配置不符合Rhino插件要求的问题。
解决方案
- 统一修复依赖包版本
完全卸载项目中所有CefSharp相关包(包括CefSharp.Common、CefSharp.Core、CefSharp.Wpf等所有带CefSharp前缀的包),清理项目的bin、obj目录删除残留dll后,仅重新安装CefSharp.Wpf最新稳定版,NuGet会自动匹配安装对应版本的依赖包,避免版本不一致导致的方法缺失问题。 - 修正Cef初始化逻辑
Cef.Initialize()全局仅允许调用一次,你当前写在窗口构造函数中,多次打开窗口会触发重复初始化错误,需要将初始化逻辑迁移到Rhino插件的启动入口OnLoad方法中,同时在插件卸载时调用Cef.Shutdown()释放资源:
调整后窗口构造函数无需再写Cef初始化代码。// Rhino插件类中重写OnLoad方法 protected override LoadReturnCode OnLoad(ref string errorMessage) { if (!Cef.IsInitialized) { var settings = new CefSettings { // 禁用GPU加速,避免和Rhino的渲染上下文冲突 DisableGpuAcceleration = true, // 自定义缓存路径,避免默认路径权限不足 CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "你的插件名称\\CefCache") }; Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null); } return base.OnLoad(ref errorMessage); } // 重写插件卸载方法 protected override void OnShutdown() { Cef.Shutdown(); base.OnShutdown(); } - 修正浏览器地址配置
ChromiumWebBrowser的Address属性需要填写完整的带协议头的地址,你当前写的www.google.com会被识别为本地文件路径,修改为https://www.google.com即可。 - 调整项目编译配置
CefSharp不支持AnyCPU编译,Rhino 7/8均为64位程序,你需要将项目的平台目标设置为x64,禁用优先32位选项。
内容的提问来源于stack exchange,提问作者Andrea Tassera
相关产品推荐
相关产品推荐

