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

已用VS2017 CA1811检测私有方法,如何检测未调用公共方法?

嘿,针对你想在VS2017里检测整个解决方案中未被调用的公共方法这个需求,我整理了几个实用的方法——毕竟你已经搞定了私有方法的CA1811规则,现在就差公共方法这块啦:

检测未被调用公共方法的几种方案

因为VS默认不会警告未被调用的公共方法(默认假设它们可能被外部程序集调用),但你的场景是程序集不会暴露到解决方案外,所以完全可以针对性处理:

方案1:快速手动检查(适合小规模解决方案)

  • 右键点击解决方案,选择 分析 > 运行代码分析 > 针对解决方案
  • 在弹出的「代码分析结果」窗口里,虽然没有专门的公共未调用方法规则,但可以结合「查找所有引用」功能批量排查:
    • 选中任意公共方法,右键选查找所有引用,如果结果只有方法自身的定义(没有其他调用记录),那它就是未被使用的。
    • 要是想批量扫,用Ctrl+Shift+F搜索public关键字定位所有公共方法,再逐个验证就行——就是有点费手,适合小项目。

方案2:自定义Roslyn分析器(自动实时警告)

如果想要在编辑代码时就自动弹出警告,推荐做个自定义的Roslyn分析器:

  1. 先确保VS2017安装了「.NET Compiler Platform SDK」工作负载
  2. 新建一个「Roslyn分析器」项目,在分析逻辑里遍历所有公共方法,检查它们在整个解决方案内的引用次数:
    • 只要是公共方法,且除了自身定义外没有其他调用,就触发警告
  3. 把分析器打包成NuGet包,安装到你的解决方案项目里,之后编译或编辑代码时就会自动检测了。

方案3:用第三方分析器包(现成工具省时间)

社区有现成的分析器能直接实现这个功能,比如SonarAnalyzer.CSharp:

  • 先给项目安装这个NuGet包
  • 然后在项目的.editorconfig文件里添加配置,让它检测公共方法:
    dotnet_diagnostic.S1144.severity = warning
    sonaranalyzer.ruleset = {
      "S1144": {
        "Parameters": {
          "CheckPublicMembers": true
        }
      }
    }
    
    这样它就会自动扫描未被调用的公共方法,给你抛出警告了。

方案4:修改CA1811的规则范围(简单但需注意误报)

CA1811默认只盯私有方法,但你可以修改它的检测范围来覆盖公共方法:

  1. 打开项目的代码分析规则集文件(.ruleset)
  2. 找到CA1811规则,右键选「编辑规则」
  3. 在规则属性里,把「目标成员可访问性」改成「公共」
  4. 保存规则集后,CA1811就会开始检测未被调用的公共方法了。

注意:这个方法可能会误报,比如用于反射调用、接口实现或者预留的API方法,这些需要你手动排除警告。

最后提醒下:不管用哪种方案,都记得排除那些特殊场景的公共方法——比如反射调用的、依赖注入容器用到的,别误删了有用的代码哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:26