从c# SONAR分析中排除生成的代码
本文关键字:代码 排除 SONAR | 更新日期: 2023-09-27 18:11:17
所以在VS2013中,我们有一个选项"从生成的代码中抑制结果(仅管理)"
在通过SONAR
执行分析时,我们是否有类似的选择?
当上述选项未选中时,下面的代码报告违规,但我在SONAR中没有看到任何使用上述选项的选项。我确实尝试了Sonar.dotnet.excludeGeneratedCode = true
选项,但似乎没有任何区别。
public IEnumerable<string> YieldTest()
{
foreach(var num in Enumerable.Range(100, 100))
yield return string.Format("{0}", num);
}
MSBuild SonarQube Runner(至少在1.0和1.0.1版本中)总是强制在构建期间启动FxCop时检查"抑制生成代码(仅管理)"标志。看到SonarQube.Integration.targets # L342
您可以通过查看在RunCodeAnalysis:
阶段启动的命令,在构建日志中验证此行为:
RunCodeAnalysis:
Running Code Analysis...
C:'Program Files (x86)'Microsoft Visual Studio 14.0'Team Tools'Static Analysis Tools'FxCop'FxCopCmd.exe
/outputCulture:1033
/out:"bin'Debug'ConsoleApplication1.exe.CodeAnalysisLog.xml" /file:"bin'Debug'ConsoleApplication1.exe" /ruleSet:"=C:'Users'dinesh'Desktop'tmp'ConsoleApplication1'.sonarqube'conf''SonarQubeFxCop-cs.ruleset"
[... references ...]
/rulesetdirectory:"C:'Program Files (x86)'Microsoft Visual Studio 14.0'Team Tools'Static Analysis Tools''Rule Sets"
/rule:"-C:'Program Files (x86)'Microsoft Visual Studio 14.0'Team Tools'Static Analysis Tools'FxCop''Rules"
/searchgac /ignoreinvalidtargets /forceoutput /successfile **/ignoregeneratedcode** /saveMessagesToReport:Active /timeout:120 /reportMissingIndirectAssemblies
你应该看到/ignoregeneratedcode被传递给FxCopCmd.exe。
现在,只有FxCop规则将被这个标志抑制。例如,StyleCop和ReSharper规则将不理解这个标志,并且仍然会报告该方法。
仅供参考,由于yield
语句的存在,FxCop似乎排除了该方法:c#编译器在程序集中为该语句生成相当复杂的IL代码。FxCop分析程序集(而不是源代码),这就是为什么它必须将yield
语句视为生成的代码。
因此,在SonarQube中,您不应该看到CA1305
的问题,无论您是否检查了项目上的"抑制生成代码(仅管理)的结果"。
我使用这个属性运行,它不包括生成的代码。
sonar.exclusions=**/*.Tests/**,**/*Language.Designer.cs,**/*.generated.cs
如果我们仔细看看,排除包括这些部分:
- /*。Tests/ ==>排除所有以.Tests(递归)结尾的文件夹中的代码
- **/*Language.Designer.cs ==>排除所有资源id文件
- **/*.generated.cs ==>排除所有以.generated.cs结尾的文件
如果您使用其他生成的文件(如winforms设计器文件),您将需要询问自己的掩码。