所以在 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);
}
最佳答案
在构建期间启动 FxCop 时,MSBuild SonarQube Runner(至少在版本 1.0 和 1.0.1 中)始终强制检查“从生成的代码中抑制结果(仅限托管)”标志.参见 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
的问题,无论您是否在项目中选中“Suppress Results from generated Code(Managed only)”。
关于c# - 从 C# SONAR 分析中排除生成的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400213/