Visual Studio 2017中如何启用强制使用this关键字的代码分析规则?
强制类内成员访问使用
this关键字的实现方案 没问题,这个需求完全可以实现!不过Visual Studio 2017搭配Roslyn本身没有内置原生规则来强制类内部调用实例方法、访问字段/属性时必须加this,但我们有两种主流方式来达成目标:
一、用StyleCop分析器(推荐,不用自己写代码)
StyleCop是.NET生态里非常成熟的代码风格检查工具,它的Roslyn版本(StyleCop.Analyzers)正好有匹配你需求的规则:
- SA1101: 强制类内部调用实例方法时必须加
this前缀 - SA1102: 强制访问实例字段时必须加
this前缀 - SA1103: 强制访问实例属性时必须加
this前缀
具体配置步骤:
- 打开你的项目,通过NuGet包管理器搜索并安装
StyleCop.Analyzers(VS2017支持直接在NuGet里操作,很方便) - 如果项目还没有规则集文件,右键项目→属性→代码分析→点击“新建”创建一个规则集
- 在规则集编辑器里,找到StyleCop.Analyzers下的Naming Rules分类,把SA1101、SA1102、SA1103这三个规则的执行级别改成Error(直接触发编译错误,强制遵守)或者Warning(仅提示警告)
- 保存规则集后,VS会在实时编辑或编译时自动检查代码——只要类内实例成员访问没加
this,就会立刻给出提示
二、自定义Roslyn分析器(适合需要高度定制的场景)
如果StyleCop的规则不能完全贴合你的特殊需求,也可以自己基于Roslyn API写个自定义分析器:
- 先确保VS2017安装了**.NET Compiler Platform SDK**(安装VS的时候勾选这个组件就行,没装的话可以通过VS安装器补装)
- 创建一个**"Analyzer with Code Fix"**类型的项目,这个模板已经帮你搭好了Roslyn分析器的基础框架
- 编写分析逻辑:遍历代码的语法树,识别类内部的实例方法调用、字段/属性访问节点,检查是否带有
this前缀 - 再写代码修复逻辑:让工具自动给符合条件的节点加上
this前缀 - 最后把自定义分析器打包成NuGet包,引用到你的目标项目里,或者直接作为项目引用使用
关于规则集的疑问
你提到的“创建新规则集”绝对是正确的思路——不管用StyleCop还是自定义分析器,规则集都是集中管理代码分析规则的最优方式,它能让你统一控制哪些规则启用、哪些忽略,以及触发时的严重程度,完全没问题。
内容的提问来源于stack exchange,提问作者Josh R
相关产品推荐
相关产品推荐

