Awesomium Mono引用冲突求助:WebSession类型定义冲突
解决Awesomium Mono引用冲突:WebSession重复定义/找不到类的问题
嘿,这个坑我之前帮人排查过!本质是旧版Awesomium SDK里Mono版本和Core版本的引用逻辑bug,咱们一步步搞定:
问题根源
Awesomium.Mono其实是专门针对Mono环境打包的版本,里面已经包含了Awesomium.Core的所有类型,但旧版SDK的引用配置有问题,导致Visual Studio没自动识别到Mono包内的Core类型,反而提示你手动加Core引用——可一加就炸,因为两个包有完全重名的命名空间和类型。
分步解决方案
彻底清理现有引用
- 右键项目→引用,删掉Awesomium.Core和Awesomium.Mono
- 卸载项目(右键→卸载项目),编辑.csproj文件,把所有和Awesomium相关的
<Reference>节点删掉,避免残留配置干扰 - 重新加载项目
只添加Awesomium.Mono引用
- 右键项目→添加引用,找到并只添加
Awesomium.Mono.dll(别碰Core!) - 检查项目的目标框架:确保是.NET Framework 4.x系列,和你的Mono环境版本匹配,别用太新的框架版本
- 右键项目→添加引用,找到并只添加
用别名强制指定Mono版本类型(如果还冲突)
- 右键引用里的Awesomium.Mono→属性,把“别名”改成
AwesomiumMono(默认是global) - 在你的代码文件最顶部加一行:
extern alias AwesomiumMono; - 之后所有用到Awesomium.Core类型的地方,都用别名前缀指定:
// 原来的代码 // this.webControl1.TargetURLChanged += new Awesomium.Core.UrlEventHandler(...); // 修改后 this.webControl1.TargetURLChanged += new AwesomiumMono::Awesomium.Core.UrlEventHandler(this.Awesomium_Windows_Forms_WebControl_TargetURLChanged);
- 右键引用里的Awesomium.Mono→属性,把“别名”改成
兜底:重新安装适配Mono的SDK
- 如果上面的方法都不行,卸载当前的Awesomium SDK,找官网更新前专门针对Mono发布的1.7.5.1版本安装包(别用通用版SDK),重新安装后再添加引用
针对你的代码示例修改
如果用了别名,完整的代码片段应该是这样:
extern alias AwesomiumMono; private void InitializeComponent() { // // webControl1 // this.webControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.webControl1.Location = new System.Drawing.Point(0, 0); this.webControl1.Size = new System.Drawing.Size(1002, 502); this.webControl1.TabIndex = 0; this.webControl1.TargetURLChanged += new AwesomiumMono::Awesomium.Core.UrlEventHandler(this.Awesomium_Windows_Forms_WebControl_TargetURLChanged); } private Awesomium.Windows.Forms.WebControl webControl1;
内容的提问来源于stack exchange,提问作者Euan Hollidge




