You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找并标记C#解决方案中未被引用的公共属性?

符合需求的工具及现有工具功能说明

已尝试工具的功能说明

你试过的三款工具确实没有原生支持查找未引用公共属性的功能:

  • RuleSet:是.NET自带的代码分析规则集合,默认规则仅覆盖代码规范、安全、性能等基础检查,无未引用成员检测规则,除非自定义规则集扩展
  • CodeMaid:主打代码清理、格式化,核心功能不包含死代码检测模块
  • StyleCop:仅做代码风格规范校验,完全不涉及代码引用链路分析

Resharper功能支持情况

Resharper原生支持该功能:你可以通过解决方案-wide分析开启后,未被引用的公共属性会被标记为未使用的成员,支持批量筛选导出,不过属于付费工具,不符合你偏好免费工具的需求。

可用的免费工具

  • Roslynator:基于Roslyn的免费开源代码分析器,内置RCS1047: Remove unused member规则,开启后可以直接检测未被引用的公共属性,支持Visual Studio直接安装扩展,也可以集成到CI流程中
  • .NET 代码分析(自带):从.NET 5开始,你可以在项目文件中配置<EnableNETAnalyzers>true</EnableNETAnalyzers>和<AnalysisLevel>latest-all</AnalysisLevel>,开启内置的未使用成员检测规则,自定义规则优先级后也可以检测公共未使用成员
  • NDepend 免费版:免费许可额度内支持静态代码分析,可直接导出所有未被引用的成员列表,适合中大型项目使用
自行实现的方案说明

VS扩展方案可行性

你提到的开发VS扩展调用查找所有引用功能的方案完全可行,但有以下注意点:

  • 要注意区分显式引用和隐式引用:比如反射调用、序列化/反序列化、ORM映射、绑定到UI的属性,都不会被VS的「查找所有引用」功能识别到,直接加[Obsolete]特性会有误伤
  • 可以调用Visual Studio SDK提供的IVsSymbolicNavigationManager或者Roslyn的语法树、语义分析接口获取引用链路,比直接调用查找所有引用的UI接口稳定性更高

更简便的实现方案

不需要开发完整VS扩展,直接基于Roslyn写控制台工具即可,核心逻辑复杂度很低:

  1. 用MSBuildWorkspace加载目标解决方案
  2. 遍历所有项目的语法树,筛选出所有public属性的语法节点
  3. 通过语义模型获取属性对应的ISymbol对象,调用FindReferencesAsync方法获取所有引用
  4. 引用数量为0的属性,修改语法树添加[Obsolete]特性后回写文件即可
    该方案不需要处理VS扩展的生命周期、UI交互等逻辑,调试和部署都更简单,还可以自定义过滤规则,比如跳过标注了[JsonProperty]/[Column]等特性的属性,避免误伤序列化、ORM场景的属性

内容的提问来源于stack exchange,提问作者inZuLiN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:57:01