JetBrains Rider引用公开化DLL报歧义引用错误VS无错如何解决
解决方案
一、代码层面消除歧义(推荐)
这种方式不依赖IDE配置,所有IDE下都能正常识别无报错:
- 如果你要访问
DerivedClass的公开name字段,使用明确的类型转换指定访问目标:
// 明确访问类的实例字段 ((DerivedClass)dobj).name = "";
- 如果你要访问
IBaseInterface的name属性,将实例转换为接口类型后再访问:
// 明确访问接口实现的属性 ((IBaseInterface)dobj).name = "";
二、屏蔽Rider的误报提示
如果不想修改原有代码,可以通过Rider专用的注释屏蔽对应报错:
单行屏蔽
在报错代码行的上一行添加以下注释,仅关闭当前行的歧义引用检查:
// ReSharper disable once AmbiguousReference dobj.name = "";
代码块屏蔽
如果有多行同类型报错,用注释块包裹对应代码范围:
// ReSharper disable AmbiguousReference dobj.name = ""; // 其他有同类误报的代码 // ReSharper restore AmbiguousReference
项目全局屏蔽
如果项目内大量出现该问题,可以在项目根目录的.editorconfig文件中添加配置,全局关闭该检查:
[*.cs] resharper_ambiguous_reference_highlighting = none
注:该问题本质是Rider的语义分析引擎对Publicise修改后的DLL元数据解析逻辑与官方Roslyn编译器不一致导致的误报,你的代码本身没有语法错误,编译运行都不会受影响。
内容的提问来源于stack exchange,提问作者Vikash Balasubramanian
相关产品推荐
相关产品推荐

