Visual Studio 2017中自定义规则集设为Info的项仍显示为Warning,为何?
我之前也碰到过类似的问题,在VS2017里调整Managed Binary Analysis规则的级别后不生效,折腾了好一阵才找到几个常见的原因,你可以逐一排查:
确认规则集的XML配置是否正确
有时候可视化编辑器可能没正确保存设置,你可以直接打开自定义规则集文件(后缀是.ruleset),检查对应规则的Action是否真的设为Info。比如CA1305的条目应该是:<Rule Id="CA1305" Action="Info" />如果这里还是
Warning,说明可视化编辑时没保存成功;如果存在重复的CA1305条目,后面的条目会覆盖前面的设置,优先级更高。检查项目属性中的代码分析细节设置
右键项目→属性→代码分析,除了确认“规则集”选择了你的自定义文件,还要注意:- 有没有勾选“生成时运行代码分析”?如果没勾选,手动触发分析时可能默认加载了内置规则集。
- Managed Binary Analysis属于二进制层面的分析,部分VS2017版本需要单独启用“运行托管二进制分析”选项(在代码分析的高级设置里),如果这个开关没打开,规则可能还是按默认级别触发。
排查代码中的
#pragma指令覆盖
如果你在代码里用了#pragma warning指令直接指定CA1305的级别,比如:#pragma warning CA1305: warning这种硬编码的设置优先级比规则集更高,会直接覆盖你在规则集里的配置。可以全局搜索项目里的
CA1305,看看有没有这类指令。验证项目文件的规则集配置
有时候VS的UI设置没同步到项目文件中,你可以手动打开项目的.csproj或.vbproj文件,查找<CodeAnalysisRuleSet>节点,确认它指向的是自定义规则集的正确路径,比如:<CodeAnalysisRuleSet>CustomRules.ruleset</CodeAnalysisRuleSet>如果路径错误或者节点缺失,VS会自动 fallback 到内置规则集。
检查VS2017的版本或安装完整性
虽然你说用的是最新版本,但早期的VS2017更新补丁存在规则集解析的bug,尤其是针对Managed Binary Analysis规则的。你可以尝试打开VS的“工具→获取工具和功能”,选择修复安装,或者检查是否有遗漏的更新包。
内容的提问来源于stack exchange,提问作者toebens

