gpt4 book ai didi

c# - 从 C# SONAR 分析中排除生成的代码

转载 作者:太空狗 更新时间:2023-10-29 23:37:55 25 4
gpt4 key购买 nike

所以在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com